1.1 定义
语法:
class 类名():
代码
1.2 创建对象
语法:
对象名 = 类名()
class Animal():
def func(self):
print("animal")
animal = Animal()
animal.func()
1.3 属性
类外添加对象属性:
语法:
对象名.属性 = 值
类外获取对象属性:
语法:
对象名.属性
class Person():
def func(self):
print("person")
p = Person()
p.name = "Tom"
p.age = 18
print(f"姓名{p.name},年龄:{p.age}")
类内获取对象属性:
语法:
self.属性名
class Person():
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
p = Person()
p.name = "Tom"
p.age = 18
p.func()
1.4 魔法方法
1.4.1 _ init _
作用:初始化对象
class Person():
def __init__(self):
self.name = "Tom"
self.age = 18
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
注意:
_ init _在创建一个对象时默认被调用,不需要手动调用(相当于C++构造函数)
_ init _中的self参数,不需要开发者传递
# 带参数的_init_()
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
1.4.2 _ str _
当使用print输出对象的时候,默认打印对象的内存地址。如果定义了_ str _方法,那么就会打印这个方法中的return数据。用于输出对象状态
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "Person"
p = Person("Tom",18)
print(p) # Person
1.4.3 _ del _
当删除对象时,调用_ del _()方法
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __del__(self):
print(f"姓名:{self.name},年龄:{self.age}")
p = Person("Tom",18)
del p
2.1 语法
class 父类名():
代码
class 子类名(父类名):
代码
多继承:
class Father():
def __init__(self):
self.hair = "black"
def __str__(self):
return self.hair
class Mother():
def __init__(self):
self.hair = "brown"
def _str_(self):
return self.hair
class Son(Father,Mother):
pass
s = Son()
print(s)
当一个类有多个父类时,默认使用第一个父类的同名属性和方法
子类可以重写父类的方法
2.2 子类调用父类的同名属性和方法
class Father():
def __init__(self):
self.hair = "black"
def __str__(self):
return self.hair
class Mother():
def __init__(self):
self.hair = "brown"
def _str_(self):
return self.hair
class Son(Father,Mother):
def __init__(self):
self.hair = "blond"
#调用父类的方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化
def father_hair(self):
Father.__init__(self)
def mother_hair(self):
Mother.__init__(self)
def son_hair(self):
# 如果先调用了父类的属性和方法,父类属性会覆盖子类属性故先调用子类的属性初始化
self.__init__()
def _str_(self):
return self.hair
s = Son()
s.father_hair()
print(s)
s.mother_hair()
print(s)
s.son_hair()
print(s)
2.3 super()调用父类方法
语法1:
super(当前类名,self).函数()
语法2:
super().函数()
def parents_hair(self):
super().__init__()
def son_hair(self):
super(Son,self).__init__()
2.4 私有权限
语法:
self.__ 属性名=值
self.__ 函数名():
class Father():
def __init__(self):
self.__money = 1000 # 私有权限
class Son(Father):
pass
多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果
class Father():
def func(self):
print("father")
class Son(Father):
def func(self):
print("son")
class Daughter(Father):
def func(self):
print("daughter")
class Person():
def person_func(self,p):
p.func()
s = Son()
d = Daughter()
p = Person()
p.person_func(s)
p.person_func(d)
类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
类属性可以使用类对象或实例对象访问
语法:类名.属性名
类属性优点:
记录的某项数据始终保持一致时,则定义类属性
实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一份内存,更加节省内存空间
类属性只能通过类对象修改,不能通过实例对象修改
语法:类名.属性名=值
5.1 类方法
需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数
# 当方法中需要使用类对象时,定义类方法,类方法一般和类属性配合使用
class Father():
__money = 100
@classmethod
def get_money(cls):
return cls.__money
5.2 静态方法
需要用装饰器@staticmethod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象
静态方法也能通过实例对象和类对象去访问
class Person():
@staticmethod
def func():
print("Person")