py.面向对象,属性,类方法,静态方法,反射

例一: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# 对象如果调用类方法,自动将类空间传给类中的clsA.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 oldboyprint(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‘)()
"

原文地址:https://www.cnblogs.com/cz007/p/9265973.html

时间: 2024-11-05 20:43:07

py.面向对象,属性,类方法,静态方法,反射的相关文章

Python面向对象之类属性类方法静态方法

类的结构 实例 使用面向对象开发时,第一步是设计类: 当使用 类名() 创建对象时,会自动执行以下操作: 1.为对象在内存中分配空间--创建对象: 2.为对象的属性 设置初始值--初始化方法(init); 对象创建后,内存中就有了一个对象的实实在在的存在--实例: 因此通常也会把: 1.创建出来的对象叫做类的实例: 2.创建对象的动作叫实例化: 3.对象的属性叫实例属性: 4.对象调用的方法叫实例方法: 在程序执行时: 1.对象各自拥有自己的实例属性: 2.调用对象方法,可以通过self. 访问

python的类的 静态属性 类方法 静态方法

一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh): self.Name=name self.Ower=ower self.Width=width self.Length=length self.Heigh=heigh r1=Room("厕所","北爷",2,2,20000)#实例化出来一个实例r1,实例化的过程就是执

python__基础 : 类属性,类方法,静态方法

类属性  定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: class Test: num = 0 类属性用 实例.类属性   或者 类.类属性 都可以访问, 如 a = Test()  用 a.num 可以访问 ,但是如果这个实例有一个实例属性 self.num 那么这样访问的其实是 self.num , 所以一般用 类.属性 即这样 Test.num 访问 类方法, 类方法是属于这个类的方法,定义方式为 前面加上装饰器 @classmethod 且第一个参数传递的

(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

一:类对象 前面讲的类定义格式中,“class 类名:”.实际上,当解释器执行class 语句时, 就会创建一个类对象. [操作] #测试类对象的生成 class Student: pass #空语句 print(type(Student)) print(id(Student)) print(Student) s1 = Student() print(s1) Stu2 = Student s2 = Stu2() print(Stu2) print(s2) 运行结果: <class 'type'>

Python之路 - 属性方法,类方法,静态方法

本章内容 属性方法 类方法 静态方法 属性方法 属性方法就是通过使用装饰器 @property , 将一个方法变成一个静态属性 , 于是我们就可以通过访问属性 , 来或得一个方法的返回值 1 from urllib.request import urlopen 2 class Web_page: 3 def __init__(self, url): 4 self.url = url 5 self.__content = None 6 # 将content方法变成属性 7 @property 8

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

php之静态属性与静态方法

静态属性用法:static public $var = 1; 从内存角度看,静态属性存放在类内,普通属性存放在对象中,类声明完毕,静态属性就存在,因为类在内存中只有一个,静态也只有一个. 普通属性存放在对象中,用对象->$var来访问,静态属性存放在类内,不依赖对象,没有对象也能访问,用类名::$var来访问,静态属性只有一个,为所有对象共享. 静态方法用法:static public function t(){} 普通方法存放在类内,只有一份,静态方法也存放在类内,也只有一份.区别在于,普通方

static静态属性和静态方法的原理与调用技巧

这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态方法的调用.分享给大家供大家参考.具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就

类和对象:静态属性、静态方法

在PHP中,使用关键字 static 修饰成员属性和成员方法被称为静态属性和静态方法.静态属性和静态方法不需要在类被实例化的情况下可以直接使用. 静态属性 与普通的成员属性不同,静态属性属于类本身而不属于类的任何实例.静态属性可以被看做是存储在类当中的全局变量,可以在任何地方通过类来访问它们. 由于静态属性不受任何具体对象的限制,所以不需要建立类实例,而可以直接引用类中的静态属性,使用语法格式如下: 类名称::$静态属性名称 其中,符号”::”被称作范围解析操作符,它可以用于访问静态成员.静态方