_ _init _ _
创建class
class Dog: def __init__(self,name,breed,age): self.name=name self.breed=breed self.age=age a_dog=Dog("abc","hound",3) print(a_dog.age,a_dog.breed,a_dog.name)
在类中定义函数
class Dog: def __init__(self,name,breed,age): self.name=name self.breed=breed self.age=age def age_promote(self): self.age+=1 a_dog=Dog("abc","hound",3) print(a_dog.age,a_dog.breed,a_dog.name) a_dog.age_promote() print(a_dog.age)
_ _str _ _
def __str__(self): """返回一个对象的描述信息""" # print(num) return "名字是:%s , 年龄是:%d" % (self.name, self.age)
变长参数列表
语法
def function_name(fixed_arg,*args): statements
arg可以是元组或列表
*的意思是变长参数列表,即参数可能不确定
eg1:
class Dog: def __init__(self,name,breed,age,*arg): self.name=name self.breed=breed self.age=age self.list=arg def age_promote(self): self.age+=1 def print_arg(self): for i in self.list: print(i) a_dog=Dog("abc","hound",3,1,2,3) a_dog.print_arg()
输出1 2 3
eg2:
class Dog: def __init__(self,name,breed,age,*arg): self.name=name self.breed=breed self.age=age self.list=arg def age_promote(self): self.age+=1 def print_arg(self): for i in self.list: print(i) a_dog=Dog("abc","hound",3,[1,2,3]) a_dog.print_arg()
输出[1,2,3]
eg3:
class Dog: def __init__(self,name,breed,age,*arg): self.name=name self.breed=breed self.age=age self.list=arg def age_promote(self): self.age+=1 def print_arg(self): for i in self.list: print(i) a_dog=Dog("abc","hound",3,*[1,2,3]) a_dog.print_arg()
输出1 2 3(同eg1)
继承
一个类继承另一个类时,继承者是子类,被继承者是父类
class class_name(base_class): class_definition
eg1:
class Dog: def __init__(self,name,breed,age,*arg): self.name=name self.breed=breed self.age=age self.list=arg def age_promote(self): self.age+=1 def print_arg(self): for i in self.list: print(i) class cat(Dog): def play(self): s='' while not s or s[0] in 'Nn': print(self.name,'fetches the balls!') s=input('wanna play again?(Y/N)') class puppy(cat): def __init__(self,name,breed,age,sitdown): cat.__init__(self,name,breed,age) self.sitdown=0 def sit(self): if (self.sitdown==0): print("I am sitting down!") self.sitdown=1 else: print("i am stand up") self.sitdown=0 a_dog=Dog("abc","hound",3,*[1,2,3]) a_dog.print_arg() pu=puppy("abc","hound",3,0) pu.sit() pu.sit() a_cat=cat("abc","hound",3,*[1,2,3]) a_cat.play()
cat 和puppy就是dog的子类
在python中都有子类自动继承超类的方法,继承可以是直接的也可以是间接的,在这里puppy直接继承了cat类的所有方法,还继承了祖父类dog的所有属性
子类继承了父类的所有方法,其中包括init ,因此不是在所有时候都要重新编写init方法
但也可以像上面puppy类这么写
类变量和类方法
类变量是由同一个类的所有成员共享的变量
eg1:
class Dog: num_dogs=0; def __init__(self,name,breed,age): self.name=name self.breed=breed self.age=age Dog.num_dogs+=1 a_dog=Dog("first_dog",'ww',3) print("dog_num: ",Dog.num_dogs) another_dog=Dog("second_dog","ee",3) print("Now_dog_num :",Dog.num_dogs)
输出
dog_num: 1 Now_dog_num : 2
实例变量
在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的
class Address: detail = "guangzhou" post_code = "510660" def info(self): #尝试直接访问类变量 #print(detail) #报错 #通过类类访问类变量 print(Address.detail) print(Address.post_code) #通过类来访问Address 类的类变量 print(Address.detail) addr = Address() addr.info() #修改Address类的类变量 Address.detail = "fushan" Address.post_code = "460110" addr.info()