- 函数、实例方法、类方法、静态方法、代码段、构造函数、析构函数、私有方法
class Person:
# 代码段,创建类对象时调用
print('Create a Person')
# 构造函数__init__
# 析构函数为__del__,一般不要使用
def __init__(self, name):
self.name = name # 实例属性,一般在__init__中定义
def greet(self):
self.age = 5 # 实例属性,一般在__init__中定义,但允许在其他地方定义
print("Hello, world! I'm {}.".format(self.name))
# 私有方法,通过在名称前加两个_实现
def __method2(self):
print('I have a self!')
# (实例)方法:通过参数self关联到所属的实例
# 可以访问 实例属性 实例方法 类属性 类方法
# 只能用 实例 调用
def method1(self):
print('I have a self!')
# 类方法:通过参数cls关联到所属的类
# 只能访问 类属性 类方法
# 可以通过 类和实例 调用
@classmethod
def cmeth(cls):
print('This is a class method of', cls)
# 静态方法:不能有cls、self,不能访问 实例属性 实例方法 类属性 类方法
# 仅仅托管于某个类的名称空间中,便于使用和维护
@staticmethod
def smeth():
print('This is a static method')
# 函数:自由函数,跟类无关,没有参数self
def function():
print("I don't...")
if __name__ == '__main__':
foo = Person('Luke Skywalker')
foo.greet()
-
类属性和实例属性
class MemberCounter: # 类属性 # 可以使用 类 访问,也可以使用 实例 访问 # 如果通过 实例 访问并赋值,那么 实例中的值 将隐藏 类中的值(但对于其他实例仍然不变) members = 0 def init(self): MemberCounter.members += 1 if __name__ == '__main__': m1 = MemberCounter() m1.init() # 输出 1 1 print(m1.members) print(MemberCounter.members) m2 = MemberCounter() m2.init() # 输出 2 2 2 print(m1.members) print(m2.members) print(MemberCounter.members) m1.members = "aaa" # 输出 aaa 2 2 print(m1.members) print(m2.members) print(MemberCounter.members)
class MemberCounter: # 类属性 members = 0 def init(self): # 定义 实例属性members,与类属性members不是一个 # 有了这个members之后,上面的类属性members只能通过类名访问 self.members = "bbb" if __name__ == '__main__': m = MemberCounter() m.init() # 输出 1 1 print(m.members) print(MemberCounter.members)
-
继承 重写
继承需要调用父类的构造方法
class Bird: def __init__(self): self.hungry = True def eat(self): if self.hungry: print('Aaaah ...') self.hungry = False else: print('No, thanks!') class SongBird(Bird): def __init__(self): self.sound = 'Squawk!' def sing(self): print(self.sound) >>>sb = SongBird() # 将出现错误,因为父类Bird的初始化方法没有被调用,实例属性hungry没有被初始化 >>>sb.eat() # 解决方案1(在较老的python版本中使用) class SongBird(Bird): def __init__(self): Bird.__init__(self) self.sound = 'Squawk!' def sing(self): print(self.sound) # 解决方案2(推荐,在新的python版本中使用) class SongBird(Bird): def __init__(self): super().__init__() self.sound = 'Squawk!' def sing(self): print(self.sound)
#继承并重写hello方法 class A: def hello(self): print("Hello, I'm A.") class B(A): def hello(self): print("Hello, I'm B.") >>>a = A() >>>b = B() >>>a.hello() Hello, I'm A. >>>b.hello() Hello, I'm B.
-
抽象类
from abc import ABC, abstractmethod class Talker(ABC): @abstractmethod def talk(self): pass class Knigget(Talker): def talk(self): print("Ni") >>>k = Knigget()