python 的一些特性



class Student(object):

    say="this is a student class"

    def __init__(self,name,age):#构造器
        self.name  = name
        self.age = age

    @classmethod#类方法
    def showClassMethod(cls):
        print "call classmethod"
        print cls.say

    @staticmethod#静态方法,属于类
    def showStaticMethod():
        print "call static method"
        print Student.say


    @property#包装器定义属性
    def sex(self):
        print "call property"
        return self._sex

    @sex.setter#包装器设置sex
    def sex(self,value):
        print "call setter"
        self._sex = value

    def getSex(self):#外部获取sex属性
        return self._sex


    def showAll(self):#类对象调用
        print "call instance method"
        print self.age,self.name,self.sex,self.getSex()

    def __del__(self):#析构函数
        print "call destructor"

    def __str__(self):#获取类对象的字符串描述
        return "student object:(name:%s)(age:%d)" % (self.name,self.age)

    def __repr__(self):#调试用   例如在控制台调用:s
        return self.__str__()

    def __getattr__(self, item):#获取非定义的属性
        if item == "score":
            return lambda :99
        elif item == "dog":
            return "xiaohuang"
        else:
            raise "attr error"
    def __call__(self, *args, **kwargs): #调用自己
        print "__call__ self:"
        for i in range(len(args)):#打印元组
            print args[i]

        for i in kwargs:#打印键值对
            print i,kwargs[i]
        print "call:my name is zhengjinwei"



Student.showClassMethod() #调用类方法

s = Student("zhengjinwei",24)

s.sex = "male" #调用sex的包装器,此处要注意的是Student类必须继承自object才能使用包装器

s.grade = "1" #动态创建属性
print s.grade

print s #调用 __str__

print s.score() #调用__getattr__
print s.dog #调用__getattr__

if callable(s):
    s(1,2,3,name="zjw",age=24) #调用 __call__

s.showClassMethod()
s.showStaticMethod()
s.showAll()




结果:

<span style="font-size:18px;">call classmethod
this is a student class
call setter
1
student object:(name:zhengjinwei)(age:24)
99
xiaohuang
__call__ self:
1
2
3
age 24
name zjw
call:my name is zhengjinwei
call classmethod
this is a student class
call static method
this is a student class
call instance method
24 zhengjinwei call property
male male
call destructor
</span>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值