Python面向对象
类
# 类定义
class Person:
# 构造函数
def __init__(self, name, age):
self.name = name # self代表类的实例
self.age = age
# 实例方法
def say_hello(self):
print("Hello, my name is {} and I am {} years old.".format(self.name, self.age))
p = Person("Alice", 25) # 实例化对象
p.say_hello() # 调用实例方法
继承
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age) # 调用父类的构造函数
self.grade = grade
def say_hello(self):
print("Hello, my name is {} and I am {} years old, and I am in grade {}.".format(self.name, self.age, self.grade))
s = Student("Bob", 20, 3)
s.say_hello()
python支持多继承,当调用子类中没有的方法,而父类中有同名的方法时,会从左到右依次查找,直到找到为止。
重写方法
可以在子类中重写父类的方法,这样可以实现不同的功能。
class Animal:
def __init__(self, name):
self.name = name
def say_hello(self):
print("Hello, my name is {}.".format(self.name))
class Dog(Animal):
def say_hello(self):
print("Woof, my name is {}.".format(self.name))
私有属性和私有方法
在python中,可以通过双下划线来定义私有属性和方法,私有属性和方法只能在类的内部访问。
class Person:
def __init__(self, name, age):
self.__name = name # 私有属性
self.__age = age
def say_hello(self):
print("Hello, my name is {} and I am {} years old.".format(self.__name, self.__age))
def __print_age(self): # 私有方法
print(self.__age)
def set_age(self, age):
self.__age = age
p = Person("Alice", 25)
p.say_hello()
p.__print_age() # 报错,私有方法不能被外部访问
p.set_age(30)
p.say_hello()