*************************************面向对象******************************************
- 类 class
class 类名: # 定义对象 def 方法1(self,参数列表) # self 相等于this pass object = 类名() # 创建对象
类名使用驼峰映射,首字母大写,类里面的方法第一个参数必须是self
-
在类外部给对象添加属性
对象.属性 = "" # 可以在类的外面给对象添加属性(不推荐)
这种方式不推荐
-
self
self.name # 可以获取对象的属性
self 相等于 java 中的this ,指当前调用对象
- __init__ (内置初始化方法)
在创建对象的时候会调用初始化方法,相等于java 中的构造函数class Cat: def __init__(self): print("这是一个初始化方法") self.name = "tom" # 初始化属性 cat = Cat()
- __del__ (内置销毁方法)
class Cat: def __init__(self): print(123) def __del__(self): print(456)
对象销毁时调用的方法 del 关键字可以删除对象
- __str__ (内置字符串)
class Cat: def __init__(self): print(123) def __str__(self): print(456) return ""
__str__ 相等于 java中toString 方法,必须有返回值,且类型为字符串
- None (关键字)
class Cat: def __init__(self): self.name = None # 空,相等于java 中的null
此关键字为空的意思,
- 身份运算符
- 私有属性和私有方法
def __test(): __age="" ......
在属性和方法前面添加2个下划线,
-
继承的语法
class 类名(父类名): pass
(父类) 就可以继承 多继承:类名(父类名,父类名)
-
super (类)
class Amige: def eat(self): print(123) class Jeken(Amige): def eat(self): super().eat() #调用父类的方法 #Amige.eat(self) #也可以用这种方法使用,但3.0不推荐 print(456) test = Jeken(); test.set()
super().方法可以调用父类的方法
-
__mro__ (可以查询方法的执行顺序)
print(C.__mro__)
查询类里面方法的执行顺序
-
类方法
@classmethod def 类方法名(cls): pass
必须有注释@classmethod ,必须有参数cls (使用其他名称也可以,但是习惯是cls),调用的时候不需要传cls
-
类属性
class A(object): count = 0
A.count 类的对象也可以调用。但是赋值的时候必须是类名.属性
-
静态方法
@staticmethod def 静态方法名(): pass # 如果一个方法不需要访问 实例属性、实例方法 和 类属性、类方法就可以定义静态方法
类名.方法 () 调用方法(不需要创建对象),不需要self 和 cls