day_22(属性、类方法、静态方法、反射)

# 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')()

猜你喜欢

转载自www.cnblogs.com/molieren/p/9266570.html
今日推荐