python-类方法和属性

#类方法,属性和迭代器
#为了类是新型的,应该把语句__metaclass__=type放在模块的开始,
#或者子类化内建类object
class newtype(object):
    pass

#构造方法:一个对象创建后,会立即调用构造方法,即__init__
class stu:
    def __init__(self):
        self.num=56

student=stu()
print(student.num)

class cls:
    def __init__(self,name):
        self.name=name

cl=cls('TXY')
print(cl.name)

#若一个类的构造方法被重写,那么就需要调用超类的构造方法,
#否则对象可能不会被正确的初始化

#调用未绑定的超类构造方法:类名.__init__
class shape:
    def __init__(self):#在调用一个实例的方法时,self参数被自动绑定到实例:绑定方法
        self.area=100
class rect(shape):
    def __init__(self):
        shape.__init__(self)#实例不会绑定,参数可以自由提供self,:未绑定方法
        self.width=10
        self.height=10
        
rec=rect()
print(rec.area)
print(rec.width)

#使用super函数
class circle(shape):
    def __init__(self):
        super(circle,self).__init__()
        self.r=10
cir=circle()
print(cir.area)
print(cir.r)

#成员访问:
'''
基本的序列和映射规则
__len__(self):返回集合中的项目数量
__getitem__(self,key):返回键对应的值
__setitem__(self,key,value):按一定的方式存储与key相关的value
__delitem__(self,key):对一部分对象使用del语句时被调用
'''

#创建一个无穷序列
import math
def checkindex(key):
    if not isinstance(key,int):
        raise TypeError
    if key<0:
        raise IndexError

class AS:
    def __init__(self,start=0,step=1):
        self.start=start
        self.step=step
        self.change={}
    def __getitem__(self,key):
        checkindex(key)
        try:
            return self.change[key]
        except KeyError:
            return self.start+key*self.step
    def __setitem__(self,key,value):
        checkindex(key)
        self.change[key]=value
s=AS(1,2)
print(s[4])

#子类化列表,字典和字符串
'''
实现一个和内建列表行为相似的序列,list没有被重写的方法可以直接调用
'''
class MyList(list):
    def __init__(self,*args):
        super(MyList,self).__init__(*args)
        self.counter=0
    def __getitem__(self,index):
        self.count+=1
        return super(MyList,self).__getitem__(index)

#属性:通过访问器定义的特性被称为属性
#创建属性的一种机制:property函数
__metaclass__=type
class Rect:
    def __init__(self):
        self.width=0
        self.height=0
    def getSize(self):
        return self.width,self.height
    def setSize(self,size):
        self.width,self.height=size
    size=property(getSize,setSize)#创建了属性size

rect=Rect()
rect.width=20
rect.height=30
print(rect.getSize())
rect.size=(100,100)
print(rect.getSize())

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘境之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值