一、类(高级)
1、类变量
(1)实例变量
类中的成员变量描述对象的属性值根据对象不同,会产生区别,称此类变量为实例变量
(2)类变量
类中的成员变量描述对象的属性值根据对象不同,不会产生区别,称此类变量为类变量
类变量是归属类的,实例变量是归属对象的
2、定义格式:
class 类名:
变量名 = 值
3、调用格式
赋值:
类名.变量名 = 值
取值:
类名.变量名(推荐)
对象名.变量名(不推荐)
修改值:
类名.变量名 = 值2
注意:
1、类变量推荐使用类名访问
2、类变量修改只能通过类名修改,使用对象修改类变量是创建了新的对象变量
3、类变量可以私有化
4、类方法
(1)定义格式
class 类名:
@classmethod
def 方法名(cls,参数列表):
方法体
(2)调用格式
类名.方法名(实参列表)推荐
对象名.方法名(实参列表)
案例:
class Chinese:
contry = "中国"
def __init__(self,id_num,name):
self.id_num = id_num
self.name = name
#类方法cls补全
@classmethod
def show_contry(cls):
print("我是中国人")
# 成员方法,self补全
def show(self):
print(self.name)
c = Chinese("440111199011232737","郑帅")
c.show_contry()#可以打印我是中国人 不推荐!!!
Chinese.show_contry()#可以打印我是中国人
(3)注意事项
1、类方法中不允许使用实例变量和实例方法
2、实例方法中允许使用类变量和类方法
案例1:
# 演示实例方法调用类成员
class Chinese:
# 类成员
contry = "中国"
def __init__(self, id_num, name):
self.id_num = id_num
self.name = name
# 类方法cls补全
@classmethod
def show_contry(cls):
"""类方法调用实例成员"""
print("我是中国人")
# 成员方法,self补全
def show(self):
"""实例方法中调用类的成员"""
print(self.name)#打印实例成员
print(Chinese.contry)#打印类成员
Chinese.show_contry()#打印类方法
# 演示实例方法调用类成员
c = Chinese("440111199011232737", "郑帅")
c.show()
输出:
-------------------------------------
郑帅
中国
我是中国人
案例2:
class Chinese:
# 类成员
contry = "中国"
def __init__(self, id_num, name):
self.id_num = id_num
self.name = name
# 类方法cls补全
@classmethod
def show_contry(cls):
"""类方法调用实例成员"""
print("我是中国人")
print(self.name)#没self
self.show()#没self
# 成员方法,self补全
def show(self):
"""实例方法中调用类的成员"""
print(self.name)#打印实例成员
print(Chinese.contry)#打印类成员
Chinese.show_contry()#打印类方法
# 演示类方法调用实例成员
c = Chinese("440111199011232737", "郑帅")
Chinese.show_contry()
报错:
(4)类方法中第一个参数理解误区
有@classmethod描述后的方法才是类方法
其他的方法类似
def show(cls):
"""实例方法中调用类的成员"""
print(cls.name)#打印实例成员
由于没有类方法的描述,因此这个以cls为形参的方法还是实例方法!切记!!!
5、静态方法
(1)定义格式
class 类名:
@staticmethod
def 方法名(形参列表):
方法体
(2)调用格式
类名.方法名(实参列表)
对象名.方法名(实参列表)
(3)特点
静态方法与类无关,可以将其转换成函数使用。
6、面向对象名称总结
class User:
contry = "类变量"
_title = "私有变量,类变量" #只能类的内部使用
def __init__(self):
self.name = "公有变量"
self._age = "公有变量,私有变量"
info = "局部变量"
def test(self):
self.address = "公有变量"
email = "局部变量"
u = User()
u.gender = "独有变量" #对象的时候定义的变量
city = "全局变量"
info = "全局变量"
def test():
info = "局部变量"
global city #全局变量
city = "全局变量"
#---------------------------------------------------------------------------------
class User:
#构造方法,创建对象属性
def __init__(self,name,age):
self.name = name
self.age = age
def instance_mathod(self,info):
message = "你好"
print("实例方法")
@classmethod
def class_method(cls,info):
message = "你好"
print("类方法")
@staticmethod
def static_method(info):
message = "你好"
print("静态方法")
二、继承
继承是一种类间关系,描述一个类从另一个类获取成员信息的类间关系。
继承必定发生在两个类之间,参与继承关系的双方称为父类和子类。
父类提供成员信息,子类获取成员信息。
1、格式
(1)定义格式:
class 类名(父类名):
pass
(2)作用
继承父类的成员变量和方法
(3)注意
子类可以添加父类没有的成员
父类私有成员不可被继承