继承父辈属性
class Person: #定义Person类
def __init__(self,name,age):
self.name=name
self.age=age
def say_age(self):
print("我也不告诉你年龄")
class Student(Person): #代表Student继承Person继承object的
def __init__(self,name,age,score): #代表继承了Person的内容
Person.__init__(self,name,age) #必须显示调用的父类的初始化方法
self.score=score
s=Student("123",6,100) #上面是= 下面是.
s.say_age() #输出第一个结果是 “我也不告诉你年龄”
print(s.score) #这边切记是s.的结构 输出第二个结果 “100”
简单的继承的写法
如果让属性变成私有的,那么应该这样处理。
class Person: #定义Person类
def __init__(self,name,age):
self.name=name
self.__age=age #标记为私有属性 再最后末尾print(s.age)就会报错,因为是私有属性
def say_age(self):
print("我也不告诉你年龄")
class Student(Person):
def __init__(self,name,age,score):
Person.__init__(self,name,age)
self.score=score
s=Student("123",6,100)
s.say_age() #输出第一个结果是 “我也不告诉你年龄”
print(s.score) #输出第二个结果 “100”
#print(s.age) #报错,因此可以看一下
print(dir(s)) #可以用来看对象存在的属性,可以看到有一个'_Person__age'
print(s._Person__age) #这样就可以调用出来加密的age
并且如果出现了方法的重写,会使下面的结果。
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age
print("我也不告诉你年龄")
def say_introduce(self):
print("大家好,我叫{0}",format(self.name))
class Student(Person):
def __init__(self,name,age,score):
Person.__init__(self,name,age)
self.score=score
def say_introduce(self):
print("大家好,这是重写了父辈方法{0}".format(self.name)) #重写了父辈的方法
s=Student("123",6,100)
s.say_introduce() #最后输出是“大家好,这是重写了父辈方法123”
普通的来说
class Person:
def __init__(self,name):
self.name=name
s=Person("123")
print(s) #输出是class Person:<__main__.Person object at 0x000001F3FB348400>
采用__str__进行重写
class Person:
def __init__(self,name):
self.name=name
def __str__(self):
return "请叫我{0}".format(self.name) #这里的return不用加括号
s=Person("123")
print(s) #输出是请叫我123