Python内置的 @property
装饰器就是负责把一个方法变成属性调用的
from math import pi
# class Circle():
# def __init__(self,r,name):
# self.r = r
# self.name = name
# @property
# def chang(self):
#
# return 2*pi*self.r
# @property
# def area(self):
# return self.r**2*pi
# c1 = Circle(3,"小张")
#
# print(c1.r)
# print(c1.name)
# print(c1.chang)
# print(c1.area)
# class Goods:
# __discount = 0.8
# num=200
# def __init__(self,name,price):
# self.name = name
# self.__price = price
# @property #把一个方法变成属性调用
# def price(self):
# return self.__price * Goods.__discount
# @classmethod # 把一个方法 变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象
# def change_discount(cls,new_discount): # 修改折扣 类方法默认有一个参数cls代表这个类
# cls.__discount = new_discount
# cls.num = 100000
# apple = Goods('苹果',5)
# print(apple.price)
# Goods.change_discount(0.5) # 类调用
# print(apple.price)
# apple.change_discount(10) #对象调用
# print(apple.price)
# print(Goods.num)
# print(apple.num)
# 当这个方法的操作只涉及静态属性的时候 就应该使用staticmethod来装饰这个方法
# class Login:
# def __init__(self,name,password):
# self.name = name
# self.pwd = password
# def login(self):pass
#
# @staticmethod
# def get_usr_pwd(): # 静态方法
# usr = input('用户名 :')
# pwd = input('密码 :')
# Login(usr,pwd)
#
# Login.get_usr_pwd()#不需要实例化对象,直接类名调用方法
# 在完全面向对象的程序中,
# 如果一个函数 既和对象没有关系 也和类没有关系 那么就用staticmethod将这个函数变成一个静态方法
#
# 类方法和静态方法 都是类调用的
# 对象可以调用类方法和静态方法么? 可以 一般情况下 推荐用类名调用
# 类方法 有一个默认参数 cls 代表这个类 cls
# 静态方法 没有默认的参数 就象函数一样