Python-基础学习笔记(五)

来源:互联网 发布:钢笔日常书法知乎 编辑:程序博客网 时间:2024/06/05 08:30

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。接下来,记录一些本人自主学习Python的一些笔记:

类的定义

注:定义类有两种方法,为了方便以后的学习,建议使用新式类定义
- 经典类

class Student:    def stand(self):        print("起立")    def sit(self):        print("坐下")
  • 新式类
# object的作用代表该类继承于object类class Student(object):    def stand(self):        print("起立")    def sit(self):        print("坐下")

创建对象

laowang = Student()# 给类添加属性:若该属性存在则为修改laowang.name = "laowang"laowang.addr = "gebi"# 调用对象方法laowang.stand()

对象方法、类方法与静态方法

对象方法:只可以用对象调用,不能用类调用,带有self形参\
类方法:可以用类调用也可以用对象调用,特点方法上面有@classmethod装饰器,并带有cls形参
静态方法:当一个方法与当前类没有关系时,可以定义一个静态方法来实现。静态方法的调用和类方法没什么区别

class Student(object):    # 对象方法    def stand(self):        print("对象方法")    # 类方法    @classmethod    def sit(cls):        print("类方法")    # 静态方法        @staticmethod    def squat():        print("静态方法")# 对象方法调用laowang = Student()laowang.stand()# 类方法调用Student.sit()

类属性

在类里面,方法外面定义的属性为类属性,类型属性可以用类直接使用,无需创建对象.作用类似于Java中的静态变量。\
注:类属性可以用对象访问,但不可以用对象直接修改,否则会帮你生成一个同名的对象属性

class Student(object):    # 类属性    name = "laowang"    def __init__(self):        passlaownag = Student()print(laowang.name)     # 打印结果:"laowang"Student.name = "laozhang"print(Student.name)     # 打印结果:"laozhang"# 用对象直接修改类属性laozhang = Studeng()print(laozhang.name)    # 打印结果:"laowang"laozhang.name = "laozhang"print(Student.name)     # 打印结果:"laowang"print(laozhang.name)    # 打印结果:"laozhang"

类的初始化方法(init):创建对象后,会自动调用init方法(类似于Java中的构造方法)

  • 无参数类型
class Student(object):    def __init__(self):        self.name = "laowang"        self.addr = "gebi"# 创建对象laowang = Student()print(laowang.name,laowang.addr)    # 打印结果:"laowang","gebi"
  • 带参数类型
class Student(object):    def __init__(self,name,addr):        self.name = name        self.addr = addrlaowang = Student("laowang","gebi")print(laowang.name,laowang.addr)    # 打印结果:"laowang","gebi"

魔法方法(str)

作用:指定输出你想要的东西(不实现此方法,打印结果为该对象的地址)

class Student(object):    def __str__(self):        return "隔壁老王"laowang = Student()print(laowang)  # 打印结果:"隔壁老王"

del方法

当一个对象没有在使用(引用计数器为0)时,系统会将这个对象销毁,此时将会调用此方法

class Student(object):    def __init__(self):        self.__name = "laowang"        self.__addr = "gebi"    def __del__(self):        print("对象已经被销毁")

私有属性

私有属性:不会被子类继承,对象不可直接使用。类似于Java中private定义的属性。在接下来的Python学习当中,建议多用私有属性,少用公开属性

class Student(object):    def __init__(self):        self.__name = "laowang"        self.__addr = "gebi"    def setName(self,name):        self.__name = name    def getName(self):        return self.__namelaowang = Student()# 错误用法laowang.__name = "帅哥"print(laowang.__name)# 正确用法laowang.setName("帅哥")print(laowang.getName())

私有方法

私有方法:不会被子类继承,对象不可直接使用

class Person(object):    def __test(self):        print("私有方法")    def test1(self):        self.__test()laowang = Person()# 错误用法laowang.__test()# 正确用法(间接调用)laowang.test1()

继承

class Person(object):    def __init__(self):        self.name = "laowang"        self.addr = "gebi"class Student(Person):    pass    # 一个类不能什么都不写(方法也是一样),但是此时没想好怎么写,可用pass占位# 此时代表Student类继承了Person类,Student类是Person类的子类,Student将可以使用Person的一些公开属性(如当前定义的name,addr)

父类方法的重写

class Person(object):    def test(self):        print("一个Person类")class Student(Person):    def test(self):        # 调用父类的test方法,有三种方式.        # Person.test(self)        # super().test()        # super(Student,self).test()    # 新式类写法        print("一个Student类")laowang = Student()laowang.test()

多继承

多继承状态下,若子类调用一个父类的方法,会按继承顺序先后查找。在下面的代码中,会先从Person类中找,若找不到,才会往Animas类中找

class Person(object):    def test(self):        print("一个Person类")class Animals(object):    def test(self):        print("一个Animals类")class PythonDemo(Person,Animals):    passlaowang = PythonDemo()laowang.test()  # 此时打印的为Person类中的test方法
原创粉丝点击