举个例子:
class Test
def __init__(self):
self.__value = 5
def getValue(self):
return self.__value
_foo _:函数前后各一个下划线,定义的特殊方法,一般是系统定义名字。类似 _init _
_foo:以单下划线开头表示protected类型的变量,即保护类型
_ _ foo:以双下环线开头的开始,表示私有类型变量
Python中继承中有一些特点:
- 在继承中基类的初始化方法__init__() 不会被自动调用,它需要在其派生类的构造中亲自专门调用
- 在调用基类方法时,需要使用super()前缀
- Python总是首先查找对应类型的方法,不能再派生类中找到对应的方法时,他才开始到基类中逐个查找
对比一个C++例子和Python的例子:
C++
class Person {
public:
Person(std::string name, int age, float height) {
this->name = name;
this->age = age;
this->height = height;
}
std::string getName() {
return name;
}
int getAge() {
return age;
}
void showInfo() {
printf("name:", name);
printf("age:", age);
printf("height:", height);
printf("visit:", visit);
Person::visit++;
}
public:
static int visit;
protected:
std::string name ="";
int age = 0;
float height = 0.0;
};
class Teacher :public Person {
Teacher(std::string name, int age, float height)
:Person(name, age, height) {
}
std::string getTitle() {
return title;
}
void setTitle(std::string title) {
this->title = title;
}
void showInfo() {
printf("title:",title);
Person::showInfo();
}
private:
std::string title;
};
int Person::visit = 0;
Python
class Person:
visit = 0
def __init__(self,name,age,height):
self._name = name
self._age = age
self._height = height
def getName(self):
return self._name
def getAge(self):
return self._age
def showInfo(self):
print("name:", self._name)
print("age:", self._age)
print("height:", self._height)
print("visit:", self.visit)
Person.visit = Person.visit + 1
class Teacher(Person):
def __init__(self,name,age,height):
super().__init__(name,age,height)
self.__title = None
def getTitle(self):
return self.__title
def setTitle(self,title):
self.__title = title
def showInfo(self):
print("title:",self.__title)
super().showInfo()
def Test():
tom = Person("Tom",25,172.2)
tom.showInfo()
jerry = Teacher("Jerry",36,180.3)
jerry.showInfo()
Test()
aaa