python第8天
'''
类:一群具有相同特征和行为的统称,如:中国人
定义:class
属性:用于描述事物的特征,实质为变量
方法:用来描述事物的行为,实质为函数,定义:def
对象:类中具体的一个实例对象,如:张三
变量:存储数据
函数:存储代码
类: 存储"相关性"变量和函数
'''
class Person(object):
color = "yellow"
def __init__(self,name,age):
self.name = name
self.age = age
def play(self):
print(f"{self.name}正在吃晚饭!")
ad = Person("张三",19)
adn = Person("李四",45)
ad.name
ad.age
ad.play()
ad.color
adn.name
adn.age
adn.play()
adn.color
属性内置函数
hasattr(ad,"name")
hasattr(ad,"wight")
getattr(ad,"name")
setattr(ad,"name","王五")
ad.name
delattr(ad,"name")
class shanxi(Person):
pass
issubclass(shanxi,Person)
issubclass(shanxi,object)
issubclass(shanxi,(Person,object))
isinstance(ad,Person)
isinstance(ad,object)
isinstance(ad,shanxi)
isinstance(1,(int,str))
ad.__getattribute__("age")
魔法函数
'''
魔法方法:
1.本质时函数
2.左右两边都是两个下划线,中间是固定的英文单词,是魔法方法
3.在特定场景下由python解释器自动调用,具有特定的功能
__init__:
场景:在实例化对象是自动调用
作用:实例对象初始化时,构造实例对象的私有属性
__del__:
场景:在删除实例对象时自动调用,
方法:del 对象
作用:在析构对象之后要运行的代码,实质是给提示
__new__:
场景:在实例化对象是自动调用,最先调用
作用:创建实例对象,主要用于单例模式
__str__:
场景:在print()打印对象时自动调用
作用:改变输出的结果,
优先级: 高于repr,即没有str时,print()会输出repr内容
__repr__:
场景:在直接引用对象时自动调用
作用:改变输出结果
'''
class Person(object):
color = "yellow"
def __init__(self,name,age):
self.name = name
self.age = age
def play(self):
print(f"{self.name}正在吃晚饭!")
def __getattr__(self,item):
print("该属性不存在")
单例模式
class Person(object):
color = "yellow"
def __init__(self,name,age):
self.name = name
self.age = age
print("init")
def __new__(cls,*args,**kwargs):
if not hasattr(cls,"_instance"):
cls._instance = super().__new__(cls)
print("new")
return cls._instance
def play(self):
print(f"{self.name}正在吃晚饭!")
def __getattr__(self,item):
print("该属性不存在")
def __str__(self):
return "这个{Person}类str!"
def __repr__(self):
return "这个{Person}类repr!"
ad = Person("张三",19)
adn = Person("李四",45)
ad.name
ad.age
ad
print(ad)