初始化函数
class ClassA(object):
def init(self):
print(‘实例化成功’)
# 实例化
a = ClassA()
其中definit(self):就是初始化函数也叫构造函数
初始化函数的写法是固定的格式:中间是 init,意思是初始化,然后前后都要有【两个下划线】,然后 init() 的括号中,第一个参数一定要写上 self,不然会报错.
构造函数(初始化函数)格式如下:
def init(self,[ 其 他 元 素 ]):
初始化函数也可以传递参数,例如↓
class ClassA(object):
def init(self,str):
print(‘实例化成功’)
print(str)
# 实例化
a = ClassA(‘hello python’)
析构函数
类在创建的时候,会调用构造函数,那么理所当然,当这个类销毁的时候,就会调用析构函数。
析构函数语法如下:
del del(self,[ 其 他 元 素 ]):
例子↓
class ClassA(object):
def init(self):
print(‘实例化成功’)
def del(self):
print(‘实例化销毁’)
a = ClassA()
del a
类的继承
单继承
class ClassName(BaseClassName):
多继承
class ClassName(Base1,Base2,Base3…):
继承的子类的好处:
- 会继承父类的属性和方法
- 可以自己定义,覆盖父类的属性和方法
调用父类的方法
一个类继承了父类后,可以直接调用父类的方法的,比如下面的例子,UserInfo2继承自父类UserInfo ,可以直接调用父类的 get_account 方法
class UserInfo(object):
lv = 5
def init(self, name, age, account):
self.name = name
self._age = age
self.__account = account
def get_account(self):
return self.__account
class UserInfo2(UserInfo):
pass
if name == ‘main‘:
userInfo2 = UserInfo2(‘两点水’, 23, 347073565);
print(userInfo2.get_account())
当需要调用相对的数值时,则根据你的方法改成相应的元素。当然也可以重写父类的方法
@classmethod
def get_name(cls):
return cls.lv
@property
def get_age(self):
return self._age
class UserInfo2(UserInfo):
def init(self, name, age, account, sex):
super(UserInfo2, self).init(name, age, account)
self.sex = sex;
if name == ‘main‘:
userInfo2 = UserInfo2(‘两点水’, 23, 347073565, ‘男’);
# 打印所有属性
print(dir(userInfo2))
# 打印构造函数中的属性
print(userInfo2.dict)
print(UserInfo2.get_name())
这一段就重写父类的构造函数↑
子类的类型判断
当我们需要判断class的类型时,可以使用isinstance函数来辨别其类型,例子↓
class User1(object):
pass
class User2(User1):
pass
class User3(User2):
pass
if __name__ == '__main__':
user1 = User1()
user2 = User2()
user3 = User3()
# isinstance()就可以告诉我们,一个对象是否是某种类型
print(isinstance(user3, User2))
print(isinstance(user3, User1))
print(isinstance(user3, User3))
# 基本类型也可以用isinstance()判断
print(isinstance('两点水', str))
print(isinstance(347073565, int))
print(isinstance(347073565, str))
最后测试的输出结果为true,true,true,true,true,false,由此我们可知最后一个的两个类型不相同,是错误的.可以看到 isinstance() 不仅可以告诉我们,一个对象是否是某种类型,也可以用于基本类型的判断。
类的多态
什么是多态,看下面例子就理解了
>>> 1 + 3
4
>>> ‘a’ + ‘b’
‘ab’
多态即为两个数(字符串)相加(连),形成一个数(一句话);也就是说不同的类型会做出不一样的反应。
class User(object):
def __init__(self, name):
self.name = name
def printUser(self):
print('Hello !' + self.name)
class UserVip(User):
def printUser(self):
print('Hello ! 尊敬的Vip用户:' + self.name)
class UserGeneral(User):
def printUser(self):
print('Hello ! 尊敬的用户:' + self.name)
def printUserInfo(user):
user.printUser()
if __name__ == '__main__':
userVip = UserVip('两点水')
printUserInfo(userVip)
userGeneral = UserGeneral('水水水')
printUserInfo(userGeneral)
上面的范例中可以清晰的看到userVip(userGeneral)和UserVip(UserGeneral)是两个不同的对象,对他们调用printUserInfo方法时,他们会自行调用相应的printUser方法,作出不同的相应,这就是多态带来的实际用处.
类专有的方法