面向对象之类装饰器

类装饰器

propety

property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值

class Student:
    def __init__(self,name,birth):
        self.name = name
        self.birth = birth

    @property     # 将一个方法伪装成属性
    def age(self):
        import time
        return time.localtime().tm_year - self.birth
alex = Student('alex',1930)
print(alex.age)   # 名词

为什么要用property

将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

除此之外,看下

ps:面向对象的封装有三种方式:
【public】
这种其实就是不封装,是对外公开的
【protected】
这种封装方式对外不公开,但对朋友(friend)或者子类(形象的说法是“儿子”,但我不知道为什么大家 不说“女儿”,就像“parent”本来是“父母”的意思,但中文都是叫“父类”)公开
【private】
这种封装对谁都不公开

class Circle:
    def __init__(self,r):
        self.r = r

    @property
    def area(self):   # 面积更像是圆的属性
        return 3.14*self.r**2

    @property
    def perimeter(self): # 周长更像是圆的属性
        return 2*3.14*self.r

c = Circle(10)
print(c.area)
print(c.perimeter)

staticmethod

class Staticmethod_Demo():
    role = 'dog'

    @staticmethod
    def func():
        print("当普通方法用")

Staticmethod_Demo.func()


class Student:
    def __init__(self,name):
        self.name = name
    @staticmethod     # 声明login方法是一个静态方法 ,不必传任何默认的参数
    def login(flag):
        print('登录程序',flag)
        username = input('>>>')
        stu = Student(username)
        return stu
# 要想调用login 必须现有对象
# 要想创建对象 必须用户先输入名字
# 得调用登录之后才开始input

# 不必实例化就可以调用的login方法 不需要传递对象作为参数,就定义这个方法为静态方法
obj = Student.login(flag = True)  # 用类名可以直接调用这个方法了
print(obj.__dict__)

classmethod

class Manager:
    def __init__(self,name):
        self.name = name
    @classmethod     # 装饰当前这个方法为一个类方法,默认传参数cls,表示当前所在的类名
    def login(cls):
        username = input('>>>')
        stu = cls(username)
        return stu

obj = Manager.login()  # 用类名可以直接调用这个方法了
print(obj.__dict__)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值