(8)python 类和对象
一、类和对象
python可以动态的添加删除变量和方法
类中的方法至少要有一个参数,第一个参数会被绑定到类的实例上,通常命名为self
1.构造函数
类中的构造方法名为 __init__(self,...,...),如果类没有定义构造方法,则会自动包含一个只有self的构造方法
class Person: '这是一个Person类' def __init__(self,name='tom',age=10): print('创建一个Person类') self.name=name self.age=age def say(self,content): print(content)
python一个类只有一个构造函数。不向java net 可以重载多个构造函数
2.创建对象
调用构造方法创建类的对象,不需要使用new关键字
p=Person()#打印创建一个Person类
调用
p.name p.say('你好')
赋值
p.name='lilei'
3.动态操作对象
动态添加变量
p.skills=['Singing','Swimming']
动态删除变量
del p.name
动态创建方法
动态创建方法是,不会自动绑定到第一个参数,所以调用方法时,需要手动绑定
def hi(self): print("say hello") p.hello=hi p.hello(p)
如果想要动态的方法能自动绑定需要用到types模块下的MetodType
略
4.self
类中使用一个方法调用另一个方法
class Dog: def jump(self): print('jump') def run(self): self.jump() print('run') p=Dog() p.run()
二、方法
1.方法调用
def a(): print('全局的a方法') class Dog(): def a(): print('Dog下的a方法') def b(self): print( self ,'Dog下的b方法') a()#使用全局方法 Dog.a()#使用位绑定的类方法 ######## dog=Dog() dog.b()#使用位绑定的类方法 Dog.b(dog)#使用位绑定的类方法 Dog.b('dog')#使用位绑定的类方法,实例名可以不是Dog类,任意字符串即可
打印
2.类方法和静态方法
类方法和静态方法可以直接调用函数,区别是类方法会自动绑定
class Dog(): @classmethod def a(self): print('Dog下的a方法') @staticmethod def b(self): print( self ,'Dog下的b方法') Dog.a() Dog.b('dog')
3.函数修饰器@
三、成员变量
1.类变量和实例变量
在类中没有操作实例变量时,得出的结果都是相同的
class Student: age=8 name='tom' Student.name#类变量 打印tom
stu=Student() stu.name#实例变量 打印tom、
如果在构造函数创建实例后,类变量和实例变量会变成两个不一样的变量
class Student: age=8 name='tom' def s(self,age,name): #新创建的两个实例变量 self.age=age self.name=name stu=Student() stu.s(10,'jack') print(Student.name)#打印 tom print(stu.name)#打印 jack
2.用property函数定义属性
四、封装
双下划线
五、继承
1.继承
定义类时使用(父类1,父类2,...)表示继承,python允许多继承
class Fruit: def fruit(self): print('水果类') class Food: def food(self): print('食物类') class Apple(Fruit,Food):#继承水果和食物类 def apple(self): print('苹果类') a=Apple() a.apple() a.fruit() a.food()
2.重写父类方法
class Apple(Fruit,Food): def fruit(self): print('苹果类')
3.
六、动态性
python是动态语言,可以动态增加删除
七、多态
由于python是弱语言天生带有多态性
八、枚举