PythonOOP高级

2019-05-13

OOP高级编程

1.使用slots(限制动态的给python绑定属性)

class Student(object):
  def _init_(self,name,age):
    self.name=name
    self.age=age

>>>s=student()
>>>s.name='Bestin'
>>>s.gender='man'   #动态的给实例绑定一个属性
>>>print(s.name)
bestin

def set_score(self,score):
  self.score=score

from types import MethodType
s.set_score=MethodType(set_score,s)  #给实例绑定一个方法
>>>s.set_score(25)
>>>s.score
25

<font color='maroon'>给一个实例绑定方法对另一个实例是不起作用的,为了给所有实力都绑定方法,可以给class绑定方法。</font>

def set_score(self,score):
  self.score=score

>>>Student.set_score=set_score
>>>s.set_score(100)
>>>s.score
100

class Student(object):
  _slots_=('name','age')  #用tuple定义绑定的属性名称

>>>s.name='Bestin'
>>>s.age=25
>>>s.score=90
AttributeError

<font color='maroon'>slots定义的属性仅对当前实例起作用,对继承的子类是不起作用的。</font>

2.使用@property(@property装饰器就是负责把一个方法变成属性调用的)

版本一:
class Student(object):
slots=('name','age','score','birth')
def init(self,name,age,score,birth):
self._name=name
self._age=age
self._score=score
self._bitrh=birth

  def get_score(self):
    rerurn self._score

  def set_score(self):
    if not isinstance(self._score,int):
      print('ValueType is not correct!')
    elif self._score<0 or self._score>100
      print('score value must be 0`100!')
    else:
      return self._score

版本二:加上@property(getter,setter,也可以只定以一个)

class Student(object):

  @property
  def socre(self):
    return self._score

  @score.setter
  def score(self,value):
    if not isinstance(value,int):
      raise ValueError('score must be aba integer!')
    if value<0 or value>100:
      raise ValueError('score must between 0`100!')
    self._score=value

>>>s=Student()
>>>s.score=60  #实际转化为s.set_score(60)
>>>s.score     #实际转化为s.get_score()  
60
>>>s.score=9999
ValueError

3.多重继承(即事先定义好类,同时不能一位的分类,这样子类就可以继承很多方法和属性!)

4.定制类(即对类添加一些需要的方法)

形如XXX的变量或者函数名要注意,这些在python中是有特殊用途的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容