1. 程式人生 > >py.面向對象,屬性,類方法,靜態方法,反射

py.面向對象,屬性,類方法,靜態方法,反射

計算 類名 研究 類型 port dbo 靜態方法 數值 class a

例一:BMI指數(bmi是計算而來的,
# 但很明顯它聽起來像是一個屬性而非方法,如果我們將其做成一個屬性,更便於理解)
#
# 成人的BMI數值:
# 過輕:低於18.5
# 正常:18.5-23.9
# 過重:24-27
# 肥胖:28-32
# 非常肥胖, 高於32
#   體質指數(BMI)=體重(kg)÷身高^2(m)
#   EX:70kg÷(1.75×1.75)=22.86

# 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)
#
# # 屬性:將方法 偽裝 成屬性,雖然在代碼層面上沒有任何高深之處,
# # 但是讓其看起來更合理.
# # 2,屬性改,和刪除.
#
# 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)
# # 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裝飾器裝飾的方法裏面,當做參數.

# property ***
# @password.setter *
# @password.deleter
#
# class Mes:
# def __init__(self, name, age,password):
# self.name = name
# self.__age = age
# self.__password = password
#
# @property
# def password(self):
# return self.__password
#
# @password.setter
# def password(self,new_password):
# self.__password = new_password
#
# @password.deleter
# def password(self):
# del self.__password
#
# p1 = Mes(‘婉容‘, 18, ‘hao123‘)
# p1.name = ‘alex‘
# print(p1.name)
# print(p1.password)
# p1.password = ‘123456‘ # 這是是行代碼,沒有真正的改.
# print(p1.password)
# del p1.password
# print(p1.password)

# 商品類 封裝商品名,商品原價, 商品折扣 定義一個方法,計算商品現價.

# 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‘)

# 靜態方法:在類中定義一個靜態方法,無需傳入你的類空間,對象空間,可以當成普通函數去用.


反射"""""""
 反射
# 非常非常非常非常重要的方法.
# 通過 字符串 操作一個空間 (對象).
# 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‘)()
"

py.面向對象,屬性,類方法,靜態方法,反射