类的方法重写、property、运算符重载

P4

动态给实例添加属性和方法,体现了动态语言的灵活性

from types import MethodType

class Person(object):
#在定义类时定义一个特殊的属性(__slots__),可以限制动态添加的属性
   __slots__ = ('name', 'age', 'speak')

per = Person()
# 动态添加属性,灵活
per.name = 'tom'
print(per.name)

#动态添加方法
def say(self):
    print('my name is' + self.name)
per.speak = MethodType(say, per)
# 偏函数:把一个参数固定,形成一个新的函数
#如果想要限制实例的属性怎么办

P5

@property

class Person(object):
    def __init__(self,age):
        # 属性直接对外暴露,不安全
        # 使用限制访问,需要自己写set和get方法才能访问 
        self.__age = age

    # 方法名为受限的变量去掉双下线
    @property  #可以使受限制的访问属性使用点语法
    def age(self):
        return self.__age = age

    @age.setter  # 去掉下划线.setter
    def age(self,age):
        if age < 0:
            age = 0
        self.__age = age

per = Person(18)

p5

运算符重载

print(1 + 2)

print('1' + '2')
# 不同的类型用加法会有不同的解释

class Person(object)
    def __init__(self, num):
        self.num = num
    # 运算符重载
    def __add__(self, other):
        return Person(self.num + other.unm)
    def __self__(self):
        return 'num=' + str(self.num)

per1 =Person(1)
per2 =Person(2)
print(per1 + per2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值