Python中使用class关键字来定义类,类要遵循下述格式(模板)
class 类名:
def __init__(self,参数,...):#构造函数
def 方法名1(self,参数,...)#方法一
def 方法名2(self,参数,...)#方法二
其中构造函数,只能在类实例时被调用一次。
在方法的第一个参数中明确地写入表示自身(自身的实例)的self是Python的一个特点。
下面我们通过一个简单例子来创建一个类:
class Man:
def __init__(self, name):
self.name = name
print("初始化!")
def first(self):
print("hello" + self.name + "!")
def second(self):
print("Good" + self.name + "!")
m = Man("BJ")
m.first()
m.second()
运行结果:
初始化!
helloBJ!
GoodBJ!
我们定义了一个Man类,通过对Man类进行实例(对象)m。
我们在Man中传入了参数name=“BJ”,这个参数初始化实例变量self.name。(实例变量:存储在各个实例中的变量)。
Man中的其他方法可以通过self.name来调用。
我们还可以在构造函数中添加其他的参数,在方法中通过self.属性名来生成或者访问实例变量。
扩展内容
1.访问权限:
- _foo_:定义的是特殊方法,一般是系统定义名字,如_init_()。
- _foo :以单下划线开头是表示的是protected类型的变量,即保护类型只能允许其本身与子类访问,不能用于from module import*
- __foo:以双下划线开头时,表示的是私有类型(private)的变量,即只允许这个类本身进行访问。
2.类的继承
- 在继承中基类的初始化方法_init_()不会被自动调用,它需要在其派生类的构造中亲自专门调用。
- 在调用基类的方法时,需要使用super()前缀
- Python总是首先查找对应类型的方法,不能在派生类中找到对应方法时,它才开始到基类中进行查找(先在本类中查找调用的方法,找不到才去基类中找)
下面我们通过一段代码来理解:
# Author:北京
# QQ:838262020
# time:2021/3/31
class Person:
visited = 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("visited:", self.visited)
Person.visited = Person.visited + 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 TestPerson():
BJ = Person("Bj", 20, 1.83)
BJ.showInfo()
print('----------------------')
bj = Teacher('bj', 40, 1.79)
bj.setTitle("教授")
bj.showInfo()
TestPerson()
运行结果:
name: Bj
age: 20
height: 1.83
visited: 0
----------------------
title: 教授
name: bj
age: 40
height: 1.79
visited: 1