''' 面对对象 创建类 格式: class 类名(父类列表):#首字母大写 属性 行为 ''' #object:基类,所有类的父类,一般没有合适的父类就写object class Human(object): #定义属性(定义变量)(名词性属性) name = " " age = 0 height = 0 weight = 0 #定义方法(定义函数) #方法的参数必须以self作为第一个参数 ''' 不需要传参,run(self) 需要传参,run(sefl,x1,x2,x3) ''' def run(self): print('run') def eat(self,food): print('eat' + food) #实例化对象 per1 = Human() print(per1) #>>>0x000......内存地址 #类的种类 print(type(per1)) #访问属性 #格式:对象名.属性名 #赋值:对象名.属性名 = 新值 per.name = 'Tom' per.age = 18 per.height = 160 per.weight = 80 print(per.name,per.age,per.height,per.weight) #访问方法 #格式:对象名.方法名(参数列表) per.openDoor() per.fillElephant() per.closeDoor() per.eat(apple) class Human(object): def run(self): print('run') def eat(self,food): print('eat' + food) #定义构造函数 def __init__(self,name,age,height,weight): # print(name,age,height,weight) #定义属性 self.name = name self.age = age self.height = height self.weight = weight #构造函数 ''' 构造函数: __init__() 在使用类创建对象的时候自动调用 注意:如果不显示写出的构造函数,默认自动添加一个空的构造函数 ''' hu = Human('hmm',20,170,50) print(hu.name,hu.age,hu.height,hu.weight) hu2 = Human('Ll',21,180,70) print(hu2.name,hu2.age,hu2.height,hu2.weight) ''' 构造函数 self代表类的实例,不是类 哪个对象调用方法,那么该方法中的self就代表那个对象 self. __class__代表类名(两个下划线_) ''' class Human(object): def run(self): print('run') def eat(self,food): print('eat' + food) def say(self): #my name is %s.I am %d years old. %(s,d) print("Hello! My name is %s,I am %d years old"%(self.name,self.age)) def __init__(self,name,age,height,weight): self.name = name self.age = age self.height = height self.weight = weight #self,访问自身属性 hu1 = Human('Tom',20,160,80) hu1.say() #析构函数:__del__()释放对象时自动调用 def __del__(self): print('析构函数') #函数运行完>>>析构函数 ''' 重写:__repr__:在机器里调用print __str__:在调用print打印对象时自动调用,给用户使用 不写__str__,print打印类的地址 ''' #需要打印的内容很多,重写了__str__方法后简化代码 def __repr__(self): return "%s-%d-%d-%d"%(self.name, self.age, self.height, self.weight) print(hu1) #私有属性 ... ... self.__money = money #通过内部方法修改私有属性money #通过自定义方法实现对私有属性的赋值与取值 def setMoney(self,money): #额外的数据过滤 if money < 0: money = 0 self.__money = money def setMoney(self): return self.__money #让内部属性不在外部直接被访问 #属性前加__两个下划线,变成私有属性 hu.__money = 0 print(hu.__money) hu.run() ##射击,弹夹子弹减少 class BulletBox(object): def __init__ (self,count): self.bulletCount = count class Person(object): def __init__(self, gun): self.gun = gun def fire(self): self.gun.shoot() class Gun(object): def __init__(self, bulletBox): self.bulletBox = bulletBox def shoot(self): if self.bulletBox.bulletCount == 0: print('没有子弹了') else: self.bulletBox.bulletCount -= 1 print('剩余子弹:%d发'%(self.bulletBox.bulletCount)) #弹夹,含有发子弹 bulletBox = BulletBox(5) #枪,含有弹夹 gun = Gun(bulletBox) #人,使用枪 per = Person(gun) #射击 per.fire() #多继承# #父类中方法名相同,默认调用括号中排前面的父类的方法。# from father import Father from mother import Mother class Child(Father, Mother): def __init__(self, money, faceValue): #调用Father里面init方法 Father.__init__(self, money) #调用Mother里面init方法 Mother.__init__(self, faceValue) #限制类的属性 #在类中添加属性 from types import MethodType class Person(object): # 限制实例的属性 # 只允许给对象添加name, age, weight, height # 在定义类的时候,定义一个特殊的属性(__slots__),可以限制动态添加的属性 __slots__ = ('name', 'age', 'speak') per = Person() #动态添加属性,体现了动态语言的灵活性 per.name = 'tom' print(per.name) #动态添加函数,调用MethodType def say(self): print('my name is ' + self.name) per.speak = MethodType(say, per) per.speak()
python 类
最新推荐文章于 2024-08-16 09:42:01 发布