python26
# property 把 方法伪装成属性
# property 把 方法伪装成属性 # 内置装饰器函数 只在面向对象中使用 from math import pi class Circle: def __init__(self,r): self.r = r @property def perimeter(self): return 2*pi*self.r @property def area(self): return self.r**2*pi # c1 = Circle(5) # print(c1.area) # 圆的面积 # print(c1.perimeter) # 圆的周长 # class Person: # def __init__(self,name,high,weight): # self.name = name # self.high = high # self.weight = weight # @property # def bmi(self): # return self.weight / self.high**2 # jin = Person('金老板',1.6,90) # jin.bmi = 18 # classmethod # staticmethod # class Person: # def __init__(self,name): # self.__name = name # @property # def name(self): # return self.__name + 'sb' # @name.setter # def name(self,new_name): # self.__name = new_name # # tiger = Person('泰哥') # print(tiger.name) # tiger.name = '全班' # print(tiger.name) # class Goods: # discount = 0.8 # def __init__(self,name,price): # self.name = name # self.__price = price # @property # def price(self): # return self.__price * Goods.discount # apple = Goods('苹果',5) # print(apple.price) # 属性 查看 修改 删除 # class Person: # def __init__(self,name): # self.__name = name # self.price = 20 # @property # def name(self): # return self.__name # @name.deleter # def name(self): # del self.__name # @name.setter # def name(self,new_name): # self.__name = new_name # brother2 = Person('二哥') # del Person.price # brother2.name = 'newName' # brother2 # del brother2.name # print(brother2.name)
property
import math class Circle: def __init__(self,radius): #圆的半径radius self.radius=radius @property def area(self): return math.pi * self.radius**2 #计算面积 @property def perimeter(self): return 2*math.pi*self.radius #计算周长 c=Circle(10) print(c.radius) print(c.area) #可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值 print(c.perimeter) #同上 ''' 输出结果: 314.1592653589793 62.83185307179586 '''
类方法
# method 方法 # staticmathod 静态的方法 *** # classmethod 类方法 **** # 类的操作行为 class Goods: __discount = 0.8 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.__discount = new_discount apple = Goods('苹果',5) print(apple.price) Goods.change_discount(0.5) # Goods.change_discount(Goods) print(apple.price) # 当这个方法的操作只涉及静态属性的时候 就应该使用classmethod来装饰这个方法
静态方法
# java 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 # 静态方法 没有默认的参数 就象函数一样
反射
#反射 ***** # name = 'alex' # 'name' class Teacher: dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'} def show_student(self): print('show_student') def show_teacher(self): print('show_teacher') @classmethod def func(cls): print('hahaha') alex = Teacher() for k in Teacher.dic: print(k) key = input('输入需求 :') # print(Teacher.dic[key]) if hasattr(alex,Teacher.dic[key]): func = getattr(alex,Teacher.dic[key]) func() # # alex.show_student() 'show_student' # func = getattr(alex,'show_student') # func() # hasattr getattr delattr # if hasattr(Teacher,'dic'): # ret = getattr(Teacher,'dic') # Teacher.dic # 类也是对象 # # ret2 = getattr(Teacher,'func') # 类.方法 teacher.func # # ret2() # print(ret) # menu = Teacher.dic # for k in menu: # print(k) # 通过反射 # 对象名 获取对象属性 和 普通方法 # 类名 获取静态属性 和类方法 和 静态方法 # 普通方法 self # 静态方法 @staticmethod # 类方法 @classmethod # 属性方法 @property # 继承 # 封装的

浙公网安备 33010602011771号