与@property相关的俩个 @方法.setter 修改操做 @方法.deleter 删除一个property属性的时候会执行被deleter装饰的方法网络
在类的命名空间有什么:函数
静态属性,spa
方法(动态属性),code
@property方法对象
类方法(@classmethod)blog
类方法的默认参数:cls,指的是调用这个方法的类名ip
类方法的调用方式:经过类名.类方法调用,本质就是方法 字符串
应用场景:若是你的整个方法中都没有用到对象命名空间中的名字,且你用到了类的命名空间中的名字(普通方法和property方法除外)get
静态方法(@staticmethod,)input
这个函数不须要默认参数self,cls
静态方法的调用方式:经过类名.方法调用,本质是函数
应用场景:函数在类中定义的时候,即类中函数
isinstance:判断对象与类直接的关系
判断这个对象是否是类的对象,这个类子类的对象
issubclass(a,b):判断类与类之间的关系,(ab都必须是类,不然报错)
判断这个类a是否是另外一个类b的子类
使用:getattr(变量名(命名空间),字符串(属于一个命名空间的变量名))
定义:反射 指使用字符串数据类型的变量名来获取这个变量的值
应用场景:
input:用户输入
文件:从文件中读出的字符串,想转换成变量的名字
网络:将网络传输的字符串转换成年糕变量的名字
反射类的变量:静态属性,类方法,静态方法
class Foo: School = "oldboy" County = "China" Language = "Chiness" @classmethod def class_method(cls): print(cls.School) def name(self): print("alex") a = Foo() while True: ch = input(">>>>>>>>>:").strip() if hasattr(a,ch): #has 判断对象中是否存在这个方法 getattr(a,ch)() #执行方法
反射对象中的变量:对象属性,普通方法
class Foo: def __init__(self,name,age): self.name = name self.age = age def eating(self): print("%s is eating"%self.name) a = Foo("lin",23) if hasattr(a,"name"): print(getattr(a, "name")) #lin is eating getattr(a,"eating")() #lin is eating
反射文本中的变量
import sys
sys.modules[__name__] #反射本文件中的变量,固定使用这个命名空间
import sys #加载sys模块 a = 1 b = 2 name ="alex" def hello(): print("hello word") print(getattr(sys.modules[__name__], "a")) getattr(sys.modules[__name__],"hello")()
class Foo: Country = "China" def func(): print("hello world") Foo.Shool = "old boy" setattr(Foo,"teacher","alex") #Foo.Shool = "old boy"与他做用相同,都是给类中增长属性 print(Foo.__dict__) # 'Country': 'China','Shool': 'old boy', 'teacher': 'alex'等
class Foo: Country = "China" def func(): print("hello world") Foo.Shool = "old boy" del Foo.Country print(Foo.__dict__) delattr(Foo,'Country') #del Foo.Country做用是同样的 print(Foo.__dict__)