定义类
class nameoftheclass(parent_class):
statement1
statement2
statement3
继承
当一个类继承另一个类时,将继承父类的所有功能
#! /usr/bin/python3
class Person(object):
"""
返回具有给定名称的Person对象
"""
def __init__(self,name):
self.name = name
def get_details(self):
"""
返回包含人名的字符串
"""
return self.name
class Student(Person):
"""
返回 Student对象 采用name,branch,year3个参数
"""
def __init__(self,name,branch,year):
Person.__init__(self,name)
self.branch = branch
self.year = year
def get_details(self):
"""
返回包含学生具体信息的字符串
"""
return "{} studies {} and is in {} year.".format(self.name,self.branch,self.year)
class Teacher(Person):
"""
返回teacher对象 采用字符串列表作为参数
"""
def __init__(self,name,papers):
Person.__init__(self,name)
self.papers = papers
def get_details(self):
return "{} teaches {}".format(self.name,','.join(self.papers))
person1 = Person('Sachin')
student1 = Student('Kushal','CSE',2005)
teacher1 = Teacher('Prashad',['C','C++'])
print(person1.get_details())
print(student1.get_details())
print(teacher1.get_details())
结果
[root@izwz9eitqs320brxl6owssz ~]# ./student_teacher.py
Sachin
Kushal studies CSE and is in 2005 year.
Prashad teaches C,C++
多继承
一个类可以继承自多个类,具有父类的所有变量和方法,语法如下:
class MyClass(Parentclass1, Parentclass2,...):
def __init__(self):
Parentclass1.__init__(self)
Parentclass2.__init__(self)
...
...
删除对象
现在我们已经知道怎样创建对象,现在我们来看看怎样删除一个对象。我们使用关键字 del 来做到这个。
>>> s = "I love u"
>>> del s
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
>>>
属性(attributes)读取方法
在 Python 里请不要使用属性(attributes)读取方法(getters 和 setters)。如果你之前学过其它语言(比如 Java),你可能会想要在你的类里面定义属性读取方法。请不要这样做,直接使用属性就可以了,就像下面这样:
>>> class student(object):
... def __init__(self,name):
... self.name = name
...
>>> std = student("Kushal Das")
>>> print(std.name)
Kushal Das
>>> std.name = 'JAVA'
>>> print(std.name)
JAVA
装饰器:
你可能想要更精确的调整控制属性访问权限,你可以使用 @property 装饰器,@property 装饰器就是负责把一个方法变成属性调用的。
下面有个银行账号的例子,我们要确保没人能设置金额为负,并且有个只读属性 cny 返回换算人名币后的金额。
#! /usr/bin/python3
class Account(object):
"""账号类,
amount 是美元金额.
"""
def __init__(self,rate):
self.__amt=0
self.rate = rate
@property
def amount(self):
"""账号余额(美元)"""
return self.__amt
@property
def cny(self):
"""账号余额(人民币)"""
return self.__amt * self.rate
@amount.setter
def amount(self,value):
if value < 0:
print("Sorry,no negative amount in the account.")
return
self.__amt = value
if __name__ == '__main__':
acc = Account(rate=6.8)
acc.amount = 20
print('Dollar amount:',acc.amount)
print('IN CNY:',acc.cny)
acc.amount = -100
print('Dollar amount:',acc.amount)
~
- 结果
[root@izwz9eitqs320brxl6owssz ~]# ./property.py
Dollar amount: 20
IN CNY: 136.0
Sorry,no negative amount in the account.
Dollar amount: 20