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)

  

 

posted @ 2020-04-01 11:05  ForLivetoLearn  阅读(149)  评论(0编辑  收藏  举报