class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 继承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex)
# 同一消息
May.print_title()
Peter.print_title()
__
,例如__name
。那种仅限在一个对象内部访问的“私有”变量在Python中并不存在class Person:
def __init__(self,name):
print("我叫{}".format(name))
class Student(Person):
def __init__(self,name):
# 使用super函数调用父类构造函数
super().__init__(name) # 也可以写成这样:Person.__init__(self,name)
print("我是一个学生!")
@abstractmethod
装饰器将方法标记为抽象的。例如:class Basic{
public:
virtual void talk() const = 0;//纯虚函数
};
from abc import ABC, abstractmethod
class Basic(ABC):
@abstractmethod
def talk(self):
pass
“鸭子类型”的语言是这么推断的:一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像鸭子,那它就可以被当做鸭子。也就是说,它不关注对象的类型,而是关注对象具有的行为(方法)。 例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的走和叫方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名
鸭子类型的关注点在对象的行为,而不在对象的类型
参考:https://zhuanlan.zhihu.com/p/59299729
类方法将类本身作为对象进行操作
,类方法的第一个参数必须是当前类对象(一般命名为cls
,用于传递类的属性和方法),实例对象和类对象都可以调用类方法。参考: