• 属性、类方法、静态方法、反射


    # 1,初识属性:
    # class A:
    #     def __init__(self, name, weight, height):
    #         self.name = name
    #         self.__weight = weight
    #         self.__height = height
    #
    #     @property  # 属性
    #     def bmi(self):
    #         return self.__weight / self.__height ** 2
    #
    # ly = A('女司机', 54, 1.6)
    # print(ly.bmi)
    #
    # # 属性:将方法 伪装 成属性,虽然在代码层面上没有任何高深之处,
    # # 但是让其看起来更合理.
    # 属性改和删除
    # class Mes:
    #     def __init__(self, name, age,password):
    #         self.__name = name
    #         self.__age = age
    #         self.__password = password
    #
    #     @property
    #     def password(self):
    #         '''对密码加密'''
    #         self.__password = hash(self.__password + '旭哥')
    #         return self.__password
    #
    #     @password.setter
    #     def password(self,new_password):
    #         if type(new_password) is str:
    #             self.__password = new_password
    #         else:
    #             print('请输入字符串类型')
    #     @password.deleter
    #     def password(self):
    #         print(6666)
    # # p1 = Mes('婉容', 18)
    # # p1.name = '婉容蓉'
    # # print(p1.name)
    # p1 = Mes('婉容', 18,'hao123')
    # # print(p1.password)
    # 之前对属性的更改
    # p1.name = 'alex'
    # p1.password = '123456'    #相当与一条命令语句,不是真正的改
    # print(p1.password)   
    # del p1.password
    # print(p1.password)
    # 第一步,对属性进行改操作,自动执行 被这个@password.setter装饰器装饰的方法
    # 第二步,将新值传给这个被@password.setter装饰器装饰的方法里面,当做参数.
    # 商品类  封装商品名,商品原价, 商品折扣  定义一个方法,计算商品现价.
    
    # class Goods:
    #     def __init__(self,name,original_price,discount):
    #         self.name = name
    #         self.__original_price = original_price
    #         self.__discount = discount
    #
    #     @property
    #     def price(self):
    #         return self.__original_price * self.__discount
    #
    #     @property
    #     def original_price(self):
    #         return self.__original_price
    #
    #     @original_price.setter
    #     def original_price(self,new_original_price):
    #         self.__original_price = new_original_price
    #
    # apple = Goods('苹果',5,0.95)
    # # print(apple.price)
    # apple.original_price = 10
    # print(apple.price)
    # 类方法,静态方法
    
    # class A:
    #     __name = 'alex'
    #     def func(self):
    #         print(self,'in  func')
    #
    #     @classmethod   # 类方法
    #     def func1(cls):
    #         print(cls, 'in func1')
    #
    #     # def change(self,new_name):
    #     #     A.__name = new_name
    #     #     return A.__name
    #     # @classmethod
    #     # def change(cls,new_name):
    #     #     A.__name = new_name
    #     #     return A.__name
    
    # a1 = A()
    # a1.func()
    # A.func(a1)
    
    # 类名去调用类方法,自动将类的空间传给类方法中的cls
    # 对象如果调用类方法,自动将类空间传给类中的cls
    # A.func1()
    # a1.func1()
    # 什么情况下使用类方法?
    # 直接让类去操作类中的方法,没有必要创建对象在操作的时候,用类方法.
    # a2 = A()
    # print(a2.change('wusir'))
    # print(A.change(111,'wusir'))
    # print(A.change('wusir'))
    # 静态方法
    
    class A:
        __name = 'alex'
        def func(self):
            print(self,'in  func')
    
        @classmethod   # 类方法
        def func1(cls):
            print(cls, 'in func1')
    
        @staticmethod  # 静态方法
        def login(username,password):
            print('登录成功...')
    
    A.login('alex', '123')
    
    # 静态方法:在类中定义一个静态方法,无需传入你的类空间,对象空间,可以当成普通函数去用.
    # def login
    # 反射
    # 非常非常非常非常重要的方法.
    # 通过 字符串 操作一个空间 (对象).
    # getattr()
    # hasattr()
    # setattr()
    # delattr()
    # 1,实例化一个对象去研究
    # class A:
    #     country = 'China'
    #
    #     def __init__(self, name, age):
    #         self.name = name
    #         self.age = age
    #
    #
    # a1 = A('alex', 1000)
    # print(a1.name)
    # print(getattr(a1,'name1'))  从对象中得到这个属性对应的值
    # print(hasattr(a1,'age'))   判断此对象中,有没有这个属性
    # setattr(a1,'sex','男')
    # setattr(a1,'name','wusir')
    # print(getattr(a1,'name'))
    # print(getattr(a1,'sex'))  # 对一个对象设置属性
    # delattr(a1,'name')  # 对一个对象属性删除
    # print(getattr(a1,'name'))
    
    # if hasattr(a1,'name1'):
    #     getattr(a1,'name1')
    # else:
    #     print('没有...')
    # 2,类中去研究.
    class A:
        country = 'China'
        job = 'student'
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def func(self):
            print('in func')
    print(getattr(A,'country1',False))
    if getattr(A,'country1',False):
    # content = input('>>>').strip()  # country
    # print(A.content)  #(A.'country')
    
    # name = '1 + 2'
    # name2 = 'name'
    # print(eval(name2))
    
    
    # print(A.country)
    # print(A.content)
    # print(eval('1+ 2'))
    
    # content = input('>>>').strip()  # 'country'
    # 你拿到的是一个字符串类型,然后你又想对这个类进行操作
    # if hasattr(A,content):
    #     print(getattr(A,content))
    
    # print(getattr(A,'job1','没有此值'))
    # print(getattr(A,'func'))
    # getattr(A,'func')(11)
    # 3,其他模块去研究.
    import oldboy
    # print(oldboy.B.name_list)
    
    # bobj = getattr(oldboy,'B')
    # print(getattr(bobj,'name_list'))
    #
    # print(getattr(oldboy.B,'name_list'))
    
    # print(getattr(oldboy.B,'add')(3,4))
    # print(getattr(oldboy,'login')('alex','123'))
    # def func():
    #     pass
    # print(func())
    # 4,本模块(本文件)去研究.
    # import sys
    # def login():
    #     print(55)
    #
    # def func3():
    #     print(333)
    #
    # # content = input(">>>")
    # # print(content())  # 这样错的
    # print(sys.modules[__name__])
    # getattr(sys.modules[__name__],'login')()
  • 相关阅读:
    正在呢 webflux
    reactive reactor
    从早上5:30开始整理资料
    1
    ES基础(四十七)第二部分总结与测验
    ES基础(四十六)Elasticsearch 数据建模最佳实践
    ES基础(四十四)Ingest Pipeline & Painless Script
    ES基础(四十三)Update by Query & Reindex
    ES基础(四十二)文档的父子关系
    ES基础(四十一)对象及Nested对象
  • 原文地址:https://www.cnblogs.com/molieren/p/9266570.html
Copyright © 2020-2023  润新知