欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python面向对象(反射)(四)

程序员文章站 2022-03-24 11:16:05
1. isinstance, type, issubclass isinstance: 判断你给对象是否是xx类型的. (向上判断 type: 返回xxx对象的数据类型 issubclass: 判断xxx类是否xxx的子类 2. 如何区分方法和函数 在类中: 实例方法 如果是类名.方法 函数 如果是 ......

1. isinstance, type, issubclass

    isinstance: 判断你给对象是否是xx类型的. (向上判断

    type: 返回xxx对象的数据类型

    issubclass: 判断xxx类是否xxx的子类

class animal:
    def eat(self):
        print("刚睡醒吃点儿东西")

class cat(animal):
    def play(self):
        print("猫喜欢玩儿")

c = cat()

print(isinstance(c, cat)) # true
print(isinstance(c, animal)) # true

a = animal()
print(isinstance(a, cat)) # 不能向下判断  false

print(type(a)) # 返回 a的数据类型
print(type(c)) # 精准的告诉你这个对象的数据类型

# 判断.xx类是否是xxxx类的子类
print(issubclass(cat, animal))  # true
print(issubclass(animal, cat))  # false

 

2. 如何区分方法和函数

    在类中:

        实例方法

            如果是类名.方法  函数

            如果是对象.方法  方法

        类方法: 都是方法

        静态方法: 都是函数

    from types import methodtype, functiontype

    isinstance()

from types import functiontype, methodtype  #  引入方法和函数的模块
class person:
    def chi(self): # 实例方法
        print("我要吃鱼")

    @classmethod
    def he(cls):
        print("我是类方法")

    @staticmethod
    def pi():
        print("你是真滴皮")

p = person()

print(isinstance(person.chi, functiontype)) # true
print(isinstance(p.chi, methodtype)) # true

print(isinstance(p.he, methodtype)) # true
print(isinstance(person.he, methodtype)) # true

print(isinstance(p.pi, functiontype)) # true
print(isinstance(person.pi, functiontype)) # true

 

3. 反射

    一共就4个函数

    attr: attribute

    getattr()

        从xxx对象中获取到xxx属性值

    hasattr()

        判断xxx对象中是否有xxx属性值

    delattr()

        从xxx对象中删除xxx属性

    setattr()

        设置xxx对象中的xxx属性为xxxx值

 

class person:
    def __init__(self, name,wife):
        self.name = name
        self.wife = wife


p = person("宝宝", "林志玲")

print(hasattr(p, "wife")) 
print(getattr(p, "wife")) # p.wife

setattr(p, "wife", "胡一菲") # p.wife = 胡一菲
setattr(p, "money", 100000) # p.money = 100000

print(p.wife)
print(p.money)

delattr(p, "wife") # 把对象中的xxx属性移除. 并不是p.wife = none
print(p.wife)