实例方法, 类方法, 静态方法, 动态方法伪装成属性
class Dog: # 实例方法 def eat(self): pass # 类方法, 主要用于操作类属性 增删改 @classmethod def sleep(cls): pass # 静态发发, 和普通函数相似 @staticmethod def func(): pass # 将一个方法伪装成属性 调用的时候不用加括号 () @property def func1(self): pass # 设置func1值得时候自动调用这个方法 ''' obj = Dog() obj.func1 = 111 这个时候把111这个值传给 value ''' @func1.setter def func1(self, value): pass ''' obj = Dog() del obj.func1 这个时候自动调用 ''' @func1.deleter def func1(self): pass ''' ************** 这样的写法和上边一样 ************** def get_name(self):pass def set_name(self, value): pass def delete_name(self): pass
name = property(get_name, set_name, delete_name)
obj = Dog() obj.name obj.name = 111 del obj.name '''
isinstance, issubclass区别
class A: pass class B(A): pass class C(B): pass class D: pass obj = C() # isinstance(a, b) 判断a是否是b类或父类的 实例化对象 print(isinstance(obj, C)) # True print(isinstance(obj, B)) # True print(isinstance(obj, A)) # True print(isinstance(obj, D)) # False # issubclass(a, b) 判断a类是否是b类的子孙类 print(issubclass(C, B)) # True print(issubclass(B, A)) # True print(issubclass(C, A)) # True print(issubclass(D, A)) # False
反射 hasattr, getattr, setattr, delattr
实例对象反射
class A: country = '中国' def __init__(self, name, age): self.name = name self.age = age def func(self): print('执行func') obj = A('张三', 18) # 只要是对象.的方式能够调用的就是True print(hasattr(obj, 'name')) # True print(hasattr(obj, 'age')) # True print(hasattr(obj, 'func')) # True print(hasattr(obj, 'sex')) # False print(getattr(obj, 'name')) # 张三 f = getattr(obj, 'func') f() # 执行func # print(getattr(obj, 'sex')) # 报错,因为没有sex , 可以设置默认值, 第三个参数 print(getattr(obj, 'sex', '男')) # 男 if hasattr(obj, 'name'): getattr(obj, 'name') # 设置 setattr(obj, 'sex', '男')
类的反射
class A: country = '中国' def __init__(self, name, age): self.name = name self.age = age def func(self): print('执行func') if hasattr(A, 'country'): print(getattr(A, 'country')) # 中国 if hasattr(A, 'func'): # getattr(A, 'func')() # 报错, 因为没有给self传参 obj = A('张三', 18) getattr(A, 'func')(obj) # 执行func
其他模块反射
创建一个reflex名字的py文件, 内容如下
name = '张三' def func(): print('reflex的func函数') class A: country = '中国' def __init__(self, name, age): self.name = name self.age = age def func(self): print('执行A类func')
本py文件内容
import reflex print(getattr(reflex, 'name')) # 张三 getattr(reflex, 'func')() # reflex的func函数 obj = getattr(reflex, 'A')('李四', 20) print(obj.country) # 中国 obj.func() # 执行A类func print(hasattr(obj, 'name')) # True
本模块反射
import sys class A: country = '中国' def __init__(self, name, age): self.name = name self.age = age def func(self): print('执行func') obj = A('张三', 18) print(hasattr(sys.modules[__name__], 'A')) print(hasattr(sys.modules[__name__], 'obj'))
简单的单例
class A: __dan = None def __new__(cls, *args, **kwargs): if cls.__dan is None: cls.__dan = object.__new__(cls) return cls.__dan def __init__(self, name): self.name = name print('触发init') a = A('123') b = A('222') print(id(a), id(b))