python类--实验楼

定义类

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

猜你喜欢

转载自blog.csdn.net/ichglauben/article/details/81811911