是一个概念就是类
具体的东西是对象
狗 类
李四家的狗 对象
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法(行为)
定义一个坦克类
类名:tank
属性:重量,材料,速度
方法:开炮,移动,转弯
class Cat: def __init__(self,name,age): self.name=name self.age=age def eat(self): print('猫在吃鱼') def drink(self): print('猫在喝水') def introduce(self): print('%s的年龄是:%d'%(self.name,self.age)) tom=Cat('汤姆',40) tom.introduce() lanmao=Cat('蓝猫',100) lanmao.introduce()
__init__会在创建对象时自动调用,然后返回创建对象的引用给对象
class Cat: def __init__(self,name,age): self.name=name self.age=age def eat(self): print('猫在吃鱼') def drink(self): print('猫在喝水') def __str__(self): return '%s的年龄是:%d'%(self.name,self.age) def introduce(self): print('%s的年龄是:%d'%(self.name,self.age)) tom=Cat('汤姆',40) print(tom) lanmao=Cat('蓝猫',100) print(lanmao)
__str__打印的是对象的描述信息,必须有return,也就是说打印对象时会自动调用__str__
对象之间的交互
定义属性时最好用方法,避免直接设置属性时出错
class Dog: def set_age(self,new_age): if new_age>=0 and new_age<=100: self.age=new_age else: self.age=0 def get_age(self): return self.age dog=Dog() dog.set_age(100) age=dog.get_age() print(age)
私有方法
class Dog: #私有方法 def __send_msg(self): print('正在发送短信') #公有方法 def send_msg(self,money): if money>10000: self.__send_msg()#类的内部可以直接调私有方法 else: print('余额不足,请充值') dog=Dog() dog.send_msg(1000) # 为了不让别人看到这个方法,因为这个方法比较重要
__del__方法,当一个对象的引用计数为0时,自动执行__del__方法
class Dog: def __del__(self): print('over') dog1=Dog() dog2=dog1 del dog1 del dog2 print('======')
测量一个对象的引用计数的方式,用sys中的getrefcount方法接收一个对象,打印出来的结果比实际的引用要多一个,因为它自己也要接收一个
import sys class T: pass t=T() print(sys.getrefcount(t)) tt=t print(sys.getrefcount(t))
#2
#3