python ==》 面向对象的反射,(isinstance and issubclass)

1.staticmethod:(静态方法)

静态方法:让类里的方法直接被类调用,就像正常的函数一样。

class Staticmethod_Demo():
    role = ‘Aray‘

    @staticmethod
    def func():
        print(‘当普通方法用‘)
Staticmethod_Demo.func()

输出结果:
当普通方法用

2.classmethod:(类方法)

类方法:默认参数为:cls  ,可以直接用类名调用,可以与类属性交互。

class Classmethod_Demo():
    role = ‘Aray‘

    @classmethod
    def func(cls):
        print(cls.role)
Classmethod_Demo.func()

输出结果:
Aray

共同点:

  1.都可以直接被类调用,不需要实例化

不同点:

  1,类方法必须有一个cls参数表示这这个类,静态方法不需要,不能直接被使用。

绑定方法: 普通方法   类方法

非绑定方法:  静态方法

目前为止学的方法有:

  普通方法:默认有一个self对象传进来,并且只能被对象调用

  类方法:默认有一个cls传进来表示本类,并且可以被类和对象调用

  静态方法:没有默认参数,并且可以被类和对象调用。(这个方法不推荐使用)

3.isinstance

isinstance 作用是: 判断一个对象是不是这个类的对象,传两个参数,分别是对象和类,如果是,返回true,否则,为false。

class Foo:
    pass
class Son(Foo):
    pass
s = Son()  #实例化
print(isinstance(s,Son)) #判断一个对象是不是这个类的对象,传两个参数,分别是 对象和类
print(isinstance(s,Foo))
print(type(s) == Son)   #精准判断
print(type(s) == Foo)

输出结果:
True
True
True
False

4.issubclass

issubclass: 判断一个类是不是另一个类的子类,传两个参数,分别是子类和父类

class Foo:
    pass
class Son(Foo):
    pass
s = Son()  #实例化

print(issubclass(Son,Foo))  #判断一个类是不是另一个类的子类,传两个参数,分别是子类和父类
print(issubclass(Son,object))
print(issubclass(Son,Son))
print(issubclass(Foo,object))
print(issubclass(Foo,Son))

输出结果:
True
True
True
True
False

二:反射

反射:要求掌握 (多用在网络相关方面)。定义:可以用字符串的方式去访问对象的属性,调用对象的方法。

常用:

  hasattr:

  getattr:

hasattr和getattr通常是一起用的。一个检测,一个获取。

class Black_one:
    feature = ‘ugly‘
    def __init__(self,name,addr):
        self.name = name
        self.affr = addr

    def sell_house(self):
        print(‘%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不是傻逼呢?‘%self.name)
    def rent_house(self):
        print(‘%s 黑中介介绍租房子啦,傻逼才租啊‘%self.name)

b1 = Black_one(‘天地三清‘,‘道法无常‘)
#检测是否含有属性
print(hasattr(b1,‘name‘))
print(hasattr(b1,‘sell_house‘))

#获取属性
n = getattr(b1,‘name‘)
print(n)
func = getattr(b1,‘sell_house‘)
func()

print(getattr(b1,‘aaaa‘,‘不存在‘))

输出结果:TrueTrue天地三清天地三清 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不是傻逼呢?不存在

不常用:

  setattr:

#设置属性(新增)
print(b1.__dict__)
setattr(b1,‘SB‘,True)
setattr(b1,‘time‘,‘1年‘)
print(b1.__dict__)

输出结果:{‘name‘: ‘天地三清‘, ‘addr‘: ‘道法无常‘}{‘name‘: ‘天地三清‘, ‘addr‘: ‘道法无常‘, ‘SB‘: True, ‘time‘: ‘1年‘}

  delattr:

delattr(b1,‘addr‘)
delattr(b1,‘time‘)
print(b1.__dict__)

输出结果:
{‘name‘: ‘天地三清‘, ‘addr‘: ‘道法无常‘, ‘SB‘: True, ‘time‘: ‘1年‘}
{‘name‘: ‘天地三清‘, ‘SB‘: True}

内置方法:

str and repr

class Foo:
    def __init__(self,name):
        self.name  = name

    def __str__(self):
        return ‘%s obj info in str‘%self.name

    def __repr__(self):
        return ‘obj info in repr‘

f = Foo(‘egon‘)
print(f)
print(‘%s‘%f)
print(‘%r‘%f)

输出结果:
egon obj info in str
egon obj info in str
obj info in repr

-del-:  如果没有手动删除,系统默认最后会del。

class Foo:
    def __del__(self):
        print(‘执行我啊!‘)
f = Foo()
print(123)
print(123)
print(123)
del f
print(123)
print(123)
print(123)

输出结果:
123
123
123
执行我啊!
123
123
123

item 系列:

时间: 2024-11-10 13:15:54

python ==》 面向对象的反射,(isinstance and issubclass)的相关文章

Python面向对象之反射

首先,我们来看两个内置函数,isinstance和issubclass,前者是判断一个对象是不是相应的类型,比如: obj = 'python' print(isinstance(obj,str)) 判断obj是否为字符串类型,结果返回True 后者issubclass则判断一个类是否为另一个的子类,比如: class A:     pass class B(A):     pass print(issubclass(B,A)) 判断B是否为A的子类,结果返回True 反射:其实它的核心本质其实

Python面向对象之反射,双下方法

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) class Foo:    f = '

第三十四篇 Python面向对象之 反射(自省)

什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成就. 四个可以实现自省的函数,是Python的内置函数 下列方法适用于类和对象 先看这四个方法对实例(b1)的使用 # 演示代码 class BlackMedium: feature = 'Ugly' def __init__(self, nam

面向对象之反射

一:什么是反射 反射是指程序可以访问,检测和修改它本身状态或行为的一种能力. 二:Python面向对象的反射:通过字符串的形式操作对象相关的属性. python中一切事物都是对象(都可以使用反射) 三:反射的好处 1实现可插拔机制 反射的好处就是,可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能 class FtpClient: 'ftp客户端,但是还么有实现具体的功能' def __init__(sel

Python之面向对象进阶------反射(Day26)

一 classmethod class Classmethod_Demo(): role = 'dog' @classmethod def func(cls): print(cls.role) Classmethod_Demo.func() staticmethod class Staticmethod_Demo(): role = 'dog' @staticmethod def func(): print("当普通方法用") Staticmethod_Demo.func() clas

Python开发基础----反射、面向对象进阶

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象,如果是返回True 1 class Foo(object): 2 pass 3 obj = Foo() 4 print(isinstance(obj, Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类,如果是返回True 1 class Foo(object): 2 pass 3 cla

Python学习【第14篇】:面向对象之反射以及内置方法

面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点: 类方法必须有一个cls参数表示这个类,可以使用类属性 静态方法不需要参数 绑定方法:分为普通方法和类方法 普通方法:默认有一个self对象传进来,并且只能被

python面向对象其他相关-异常处理-反射

1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 a1 = "123" print type(n1) print type(a1) print isinstance(n1,int) #判断n1是否属于int类型,正确返回True print '-->',isinstance(n1,str) #判断n1是否属于str类型,正确返回Tr

python——面向对象篇之异常和反射

内置函数isinstance和issubclass 1.1 isinstance用法: 1 isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: 1 print isinstance("test",str) #判断test是否是字符串类型 2 3 C:\Python27\python.exe D:/python/s11/8day/反射/test.py 4 5 True 6 7 8 print isinstance(123,int) #判断123是否

Python面向对象反射,双下方法

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 对实例化对象的示例 class Foo