0%

类和对象

类和对象

使用的是python3.x版本

Python也像java一样,使用class来声明类

1
2
3
4
5
class Person:
pass # 表示空的代码块
# 实例化的时候不需要使用new
p = Person()
print(p)

类中也可以声明函数,但是与普通的函数不同,需要在参数列表的第一个增加一个self变量。self传入的是该类的对象实例(这个是python自动传入的,我们在调用方法时不需要传入,每个与类相关联的方法调用都自动传递实参self)

类中的函数称为方法

1
2
3
4
5
6
class Person:
def say(self):
print('Hello')

p = Person()
p.say()

__init__方法

python中的构造方法与java不同,不是使用类的名字,而是使用__init__方法

1
2
3
4
5
6
7
8
class Person:
def __init__(self,name):
self.name = name
def say(self):
print('Hello ',self.name)

p = Person('zs')
p.say()

类变量和对象变量

java中存在类变量和实例变量,同样的,python中也存在这两种变量。使用类名.变量名就可以使用其类变量,使用self.变量名可以使用其对象变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Employee:
# 类变量
empCount = 0

def __init__(self,name):
# 使用实例变量
self.name = name
# 使用类变量
Employee.empCount += 1

def getCount(self):
print('empCount ',Employee.empCount)

def getName(self):
print('name ',self.name)

emp1 = Employee('zs')
emp2 = Employee('ls')
emp1.getCount()
emp1.getName()
emp2.getCount()
emp2.getName()

输出结果

1
2
3
4
empCount  2
name zs
empCount 2
name ls

继承

继承作为面向对象中不可或缺的一部分,可以有效的实现代码的重用。python肯定也是有继承的,其语法是 子类(父类)

1
2
3
4
5
6
7
8
9
10
class Parent:
def __init__(self):
print('父类的构造函数')

class Child(Parent):
def __init__(self):
print('子类的构造函数')

# 输出 子类的构造函数
child = Child()

可以发现,好像python的继承和java不太一样,子类实例化的时候不会调用父类的构造函数。这是因为子类重写了其父类的构造器函数,就不会调用父类构造函数了。如果没有重写的话,就会调用父类的构造函数。

如果重写子类构造函数时,想要继承父类的构造函数,需要显式的来调用,使用super(子类,self).__init__(参数)来调用,也可以使用父类.__init__(self,参数)来调用

1
2
3
4
5
class Child(Parent):
def __init__(self):
# 或者Parent.__init__(self)
super(Child,self).__init__()
print('子类的构造函数')

python不是单继承,可以继承多个父类,多个父类之间使用逗号隔开 子类(父类1,父类2)

欢迎关注我的其它发布渠道