@property   将类中的方法伪装成属性

与@property相关的俩个   @方法.setter   修改操作    @方法.deleter   删除一个property属性的时候会执行被deleter装饰的方法

在类的命名空间有什么:

  静态属性,

  方法(动态属性),

  @property方法

  类方法(@classmethod)

    类方法的默认参数:cls,指的是调用这个方法的类名

    类方法的调用方式:通过类名.类方法调用,本质就是方法  

    应用场景:如果你的整个方法中都没有用到对象命名空间中的名字,且你用到了类的命名空间中的名字(普通方法和property方法除外)

  静态方法(@staticmethod,)

    这个函数不需要默认参数self,cls

    静态方法的调用方式:通过类名.方法调用,本质是函数

    应用场景:函数在类中定义的时候,即类中函数

isinstance:判断对象与类直接的关系

  判断这个对象是不是类的对象,这个类子类的对象

issubclass(a,b):判断类与类之间的关系,(ab都必须是类,否则报错)

  判断这个类a是不是另一个类b的子类

反射 getattr  

  使用:getattr(变量名(命名空间),字符串(属于一个命名空间的变量名))

  定义:反射 指使用字符串数据类型的变量名来获取这个变量的值

  应用场景:

    input:用户输入

    文件:从文件中读出的字符串,想转换成变量的名字

    网络:将网络传输的字符串转换成年糕变量的名字

反射类的变量:静态属性,类方法,静态方法

class Foo:
School = "oldboy"
County = "China"
Language = "Chiness"
@classmethod
def class_method(cls):
print(cls.School)
def name(self):
print("alex")
a = Foo()
while True:
ch = input(">>>>>>>>>:").strip()
if hasattr(a,ch): #has 判断对象中是否存在这个方法
getattr(a,ch)() #执行方法

反射对象中的变量:对象属性,普通方法

class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def eating(self):
print("%s is eating"%self.name)
a = Foo("lin",23)
if hasattr(a,"name"):
print(getattr(a, "name")) #lin is eating
getattr(a,"eating")() #lin is eating

反射文本中的变量

import sys

sys.modules[__name__]    #反射本文件中的变量,固定使用这个命名空间

import sys  #加载sys模块
a = 1
b = 2
name ="alex"
def hello():
print("hello word")
print(getattr(sys.modules[__name__], "a"))
getattr(sys.modules[__name__],"hello")()

hasattr   (a,"b") 判断对象中有没有“b”这个方法,与getattr配合使用,防止报错

setattr (a,"b",c) 接受三个参数,命名空间,“变量名”,变量值

  

class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
setattr(Foo,"teacher","alex") #Foo.Shool = "old boy"与他作用相同,都是给类中增加属性
print(Foo.__dict__) # 'Country': 'China','Shool': 'old boy', 'teacher': 'alex'等

delattr   (a,"b")   删除命名空间中b这个属性,如果没有会报错

class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
del Foo.Country
print(Foo.__dict__)
delattr(Foo,'Country') #del Foo.Country作用是一样的
print(Foo.__dict__)

最新文章

  1. script标签中defer和async属性的区别
  2. requirejs 打包 添加版本号收集资料 待测试
  3. Windows Azure Storage (17) Azure Storage读取访问地域冗余(Read Access – Geo Redundant Storage, RA-GRS)
  4. MongoDB 概念解析
  5. OpenCV Linux 安装 Make出错
  6. uva 297 quadtrees——yhx
  7. 词法分析器--DFA(c++实现)
  8. matlab 小波变换
  9. 学习c的第8天
  10. tcp/udp socket编程异同
  11. 封装JDBC操作数据库的方法
  12. JSP动作--JSP有三种凝视方式
  13. java+mysql中文乱码问题
  14. STL模板_容器概念
  15. C#推送RTMP到SRS通过VLC进行取流播放!!
  16. vue视频学习笔记01
  17. Java 9 揭秘(13. Collection API 更新)
  18. python 脚本开发实战-当当亚马逊图书采集器转淘宝数据包
  19. ubuntu更改用户密码
  20. C/JS_实现冒泡排序

热门文章

  1. js实现用按钮控制网页滚动、以及固定导航栏效果
  2. day3 -- 集合、文件操作、函数
  3. Java == 和 equals 的区别(面试描述)
  4. 《PHP程序员面试笔试宝典》——如何准备集体面试?
  5. Solution -「51nod 1514」美妙的序列
  6. 教你快速区分传统报表和商业智能BI
  7. 实力再获认可!Smartbi入选爱分析·产业数字化厂商全景报告
  8. 【C# GC】C# GC何时被调用
  9. 【C# 线程】线程局部存储(TLS)理论部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>
  10. 移动C盘的.gradle文件