python 类
- 定义类
class 类名: def 函数名(self): #哪个对象调用这个方法,self就是哪个对象 语句 def 函数名(self): #类中定义函数,第一个参数要是self 语句 变量=类名() #创建类
- 类的内置方法
class cat(): def __new__(self): #在init执行之前的方法,构造方法 pass def __init__(self,newname,newage): #初始化该类时调用此方法,定义变量,不能return self.name=newname self.age=newage def __del__(self): #实例被清除时调用此方法,析构方法 pass def __str__(self): #str,print,format这三个函数调用实例时,此方法放回的值,如果没有__str__,使用__repr__返回的值,如果也没有,则调用object pass def__repr__(self): #[],(),{}间接调用时,使用这个方法返回值 pass def__bytes__(self): # bytes()函数调用 pass def __call__(self): #实例=类名() -> 实例() 这时候调用的方法 pass def __len__(self): #len(实例),这个时候调用的方法 pass def __hash__(self): #返回对象的hash,hash()方法调用;如果这个方法返回none,该类就不可hash pass def __eq__(self): #==时候调用,在set集合去重时会被调用,先判断hash,在判断eq pass
- 查看实例成员
tom = Person('tom') print(tom.__dict__)
- 私有成员(双下划线),防止外部直接访问,不过可以间接的通过"_类名__属性名"访问
class cat: __key=value #私有属性 def __方法(self): #私有方法 pass
- 保护成员(单下划线),只是一种约定,尽量不要直接使用这种变量,python不会对其做出任何更改
class cat: _key=value def _方法(self): pass
- 继承
#单继承 class 子类(父类名): def 方法名(self): #子类方法 pass def 父类方法名(self): #重写父类方法 重写父类方法 super().父类方法() #调用父类方法,这样不会覆盖父类方法 #多继承,调用方法查找顺序子类->父类1->父类2 class 子类(父类1,父类2) pass
- 类方法:当⽅法中 需要使⽤类对象 (如访问私有类属性等)时,定义类⽅法
#需要⽤装饰器 @classmethod 来标识其为类⽅法,对于类⽅法,第⼀个参数必须是类对象,⼀般以 cls 作为第⼀个参数。 class Dog(object): __tooth = 10 @classmethod def get_tooth(cls): return cls.__tooth wangcai = Dog() result = wangcai.get_tooth() print(result) # 10
- 静态方法:当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性),也不需要使⽤类对象 (如类属性、类⽅ 法、创建实例等)时,定义静态⽅法
#需要通过装饰器 @staticmethod 来进⾏修饰,静态⽅法既不需要传递类对象也不需要传递实例对象 (形参没有self/cls) class Dog(object): @staticmethod def info_print(): print('这是⼀个狗类,⽤于创建狗实例....') wangcai = Dog() # 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问 wangcai.info_print() Dog.info_print()
- main
mymodule.py作为一个模块,我们希望保留末尾测试代码,即上面调用函数和类,但也不希望再导入模块的时候执行。该怎么办呢? 可以利用Python文件的一个内置属性__name__实现,如果直接运行Python文件,__name__的值是"__mian__",如果import一个模块,那么模块的__name__的值是"文件名"。 # vi mymodule.py name = "aliang“ def count(a, b): result = a * b return f"{a}与{b}的乘积是: {result}“ if __name__ == "__main__": print("我在手动执行这个程序") print(count(6,6)) print(name)
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!