【无标题】

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

在外部定义类中的方法和属性

调用外部的属性,不需要特殊的操作,非常容易。调用外部方法,却需要特殊的方法MethodType,应用相关语法才能进行相关操作。同时可以通过__slots__方法对外部方法和属性的调用进行相关限制。

from types import MethodType     #调用相应方法,让程序能够实现相应的外部方法调用
class Cat(object):               #类的实现
    __slots__ = ("name","age","speak","run")#__slots__中有的方法和属性名,外部才能进行定义,否则会报错
    def Eat(self):
        print("吃")
cat = Cat()                     #对象的实例化
cat.name="qqq"
print(cat.name)
def run(self):                  #外部跑方法
 print("Run")
cat.run = MethodType(run,cat)    #进行外部方法的调用
cat.run()
cat.Eat()

实现对象属性私有化,用__加属性名进行定义,并且提供了property让之后的访问更加容易

class person():
    def __init__(self,age):
        self.__age=age
    @property
    def age(self):#相当于get方法
        return self.__age
    @age.setter
    def age(self,age):#相当于set方法,但是更方便于下面的调用
        if age < 0:
            age = 0
        self.__age =age
person1 = person(18)
person1.age=-100  #访问受限
print(person1.age)

运算符重载

对于对象的操作,也可以根据不同的运算符,进行不同的操作,这个时候主要是通过类中的方法来实现的,这些方法相对固定,可以进行记忆使用

class car(object):
    def __init__(self,num,name):
        self.num = num
        self.name =name
    def __str__(self):#字符串
        return "这类汽车的数量是%s"%self.num
    def __add__(self, other):#对象相加
        return self.num +other.num
    def __len__(self):#求长度
        return len(self.name)
car1 = car(23,"qwe")
car2 = car(13,"212")
print(len(car1))
print(car1+car2)
print(car1)

__pow__和__cmp__再python中的使用

好像自己使用封装好的函数会更加合理,自己定义感觉意义不大,可以进行原理的学习吧。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def __str__(self):
        return '(%s: %s)' % (self.name, self.score)
    __repr__ = __str__
    def __pow__(self, power, modulo=2):#进行平方函数的定义,不是完全理解
        return power**modulo
    def __cmp__(self, s):              #进行成绩比较函数的定义,基本理解如何进行使用
        if self.score < s.score:
            return s.name
        elif self.score > s.score:
            return self.name
        else:
            return 0
s1 = Student("s1号学生",11)
s2 = Student("s2号学生",112)
s3 = Student("s3号学生",116)
print("s1号学生平均的平方值:")
print(Student.__pow__(s1,s1.score))#进行成绩平方的输出
print("s2号学生平均的平方值:")
print(Student.__pow__(s2,s2.score))#进行成绩平方的输出
print("s3号学生平均的平方值:")
print(Student.__pow__(s3,s3.score))#进行成绩平方的输出
print("两个学生成绩进行比较,谁成绩高输出谁的名字,s1和s2进行比较")
print(Student.__cmp__(s1,s2))#进行成绩的比较,谁的成绩高输出谁的分数
print("两个学生成绩进行比较,谁成绩高输出谁的名字,s2和s3进行比较")
print(Student.__cmp__(s2,s3))#进行成绩的比较,谁的成绩高输出谁的分数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值