python基础 | 类与继承
1、类
在Python中,使⽤class关键字定义类,类是⼀个抽象描述,并不是真正的存在,
需要把它初始化才会产⽣⼀个真正的事物,我们称之为对象
在编程过程中,拥有⾏为(函数)和数据的是对象,⽽不是类
class Person:
pass # An empty block
p = Person()
print(p)
输出结果:
<__main__.Person object at 0x0000022256BD16D0>
创建了类Person的对象,将其打印出来
class Person1:
def sayHi(self):
print('Hello, how are you?')
p1 = Person1()
p1.sayHi()
输出结果:
Hello, how are you?
成员函数,创建对象调用
1、Python 中所有的类成员(包括数据成员)默认都是公有的,没有权限控制符
2、如果你使⽤的数据成员名称以双下划线前缀,⽐如 __privatevar,Python 的名称管理体系会有效地把它作为私有变量(约定俗成的规定)
3、这样就有⼀个惯例,如果某个变量只想在类或对象中使⽤,就应该以单下划线前缀。⽽其他的名称都将作为公共的,可以被其他类或者对象使⽤。记住这只是⼀个惯例,并不是Python所要求的(与双下划线前缀不同)
class Person2:
def __init__(self, name):
self.name = name
def sayHi(self):
print('Hello, my name is', self.name)
p2 = Person2('张三')
p2.sayHi()
输出结果:
Hello, my name is 张三
def __init__(self, name)
:类似于c++构造函数,对象创建的初始化
Person2('张三')
:将字符串 张三 传进去
class Person3:
# 统计人口数量
population = 0
# 类的初始化
def __init__(self, name):
self.name = name
print('(Initializing %s)' % self.name)
Person3.population += 1
# 成员函数
def sayHi(self):
print('Hi, my name is %s.' % self.name)
def howMany(self):
if Person3.population == 1:
print('I am the only person here.')
else:
print('We have %d persons here.' % Person3.population)
zs = Person3('张三')
zs.sayHi()
zs.howMany()
ls = Person3('李四')
ls.sayHi()
ls.howMany()
zs.sayHi()
zs.howMany()
print("\n\n")
输出结果:
(Initializing 张三)
Hi, my name is 张三.
I am the only person here.
(Initializing 李四)
Hi, my name is 李四.
We have 2 persons here.
Hi, my name is 张三.
We have 2 persons here.
对成员变量的使用
2、类的继承
# 基类(父类)
class SchoolMember:
def __init__(self, name, age):
self.name = name
self.age = age
print('(Initialized SchoolMember: %s)' % self.name)
def tell(self):
print('Name:"%s" Age:"%s"' % (self.name, self.age))
# 派生类(子类)
class Teacher(SchoolMember):
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age) # 先调用基类的
self.salary = salary
print('(Initialized Teacher: %s)' % self.name) # 调用父类的对象,使用自己的参数
def tell(self):
SchoolMember.tell(self) # 调用基类的函数
print('Salary: "%d"' % self.salary) # 调用自己的类中的成员变量
class Student(SchoolMember):
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print('(Initialized Student: %s)' % self.name) # 把父类的对象也继承了
def tell(self):
SchoolMember.tell(self) # 基类有自己的tell函数,调用基类的函数,加上自己的语句
print('Marks: "%d"' % self.marks)
t = Teacher('张老师', 40, 30000)
s = Student('王二', 22, 75)
members = [t, s] # 列表有两个成员
for member in members:
member.tell()
输出结果:
(Initialized SchoolMember: 张老师)
(Initialized Teacher: 张老师)
(Initialized SchoolMember: 王二)
(Initialized Student: 王二)
Name:“张老师” Age:“40”
Salary: “30000”
Name:“王二” Age:“22”
Marks: “75”