程序是一系列对象的相互作用
装饰器:面向切面
函数是编程
面向对象的三大特性:继承、多态和封装
(1)定义一个类
init( )是类的初始化方法 ,在init( )方法里声明的属性是实例属性,其中self代表对象本身
第一个参数是self的方法,叫做实例方法,实例方法在使用之前必须实例化
运行结果
其中zhangsan和wangwu都是对象,他们都拥有name,age,number这些属性,他们还有eat,walk和talk方法,有些方法例如talk是需要传参的,其中self这个参数不需要手动传参,解释器自动传参
(2)类的类型
新式类,继承object
经典类 ,不继承任何类
object是所有类的基类
运行结果
(3)
属性也可以在一个实例方法中定义,但是一般不使用这样的方法
运行结果
因为number属性是在实例方法test中才定义的,所以需要先使用test方法
运行结果
(4)私有方法
以双下划线开头,但是不以双下划线结尾,在外部看不到私有方法,
运行结果
这种私有方法需要在类的某个方法内部调用,不能在外部调用
运行结果
(5)私有属性
私有属性与私有方法一样需要写一个方法给一个接口
运行结果
(6)类变量
类变量可以通过实例访问,也可以通过类名直接访问
运行结果
(7)
通过实例修改类变量,不会修改其他实例,也不会影响类本身
运行结果
(8)类方法的定义
加上装饰器@classmethod
在类方法中严禁操作实例属性,实例方法中也不能调用类方法
类属性与实例属性类似,可以在类方法中定义,并且在类方法中定义的类属性需要先调用该方法才能使用
运行结果
(9)静态方法
@staticmethod装饰器,不再需要cls参数。
运行结果
可以通过实例调用也可以通过类直接调用,但是不能调用cls的其他值
运行结果
(10)魔术方法
被@property装饰的方法不再是一个方法,而是一个属性
也叫做get方法
运行结果
(11)
与get方法对应的有一个set方法,set方法用于给属性赋值。
@函数名.setter
def 函数名(self,value):
这里写一个以10进制输入,以2进制输出的get方法和set方法。
运行结果