面向对象-其他方法

isinsetance()判断对象所属类型,包括,继承关系

class A:
    pass
class B(A):
    pass
b = B()
print(isinstance(b,A)) #包括继承关系
print(type(b) is A) #不包括继承关系
结果:True
结果:Flase

issubclass() 判断类与类之间的关系

class A:
    pass
class B(A):
    pass
b = B()
print(issubclass(B,A))  #子级放在父级前面
结果:True

二.反射: 用字符串类型的变量名来访问这个变量的值

反射的方法:getattr,hasattr,setattr,delattr

命名空间 XXX == getattr(命名空间,'XXX')

(1):类 静态属性,类方法,静态方法

class Student:
    ROLE = 'STUDENT'
    @classmethod
    def check_course(cls):
        print('查看课程')
    @staticmethod
    def login()
        print('登录')
#反射查看属性
print(Student.ROLE)
print(getattr(Student,'ROLE'))
#反射调用方法
getattr(Student,'check_course)()  #类方法
getattr(Student,'login')() #静态方法

hasattr 和 getattr 配合使用

num = input('>>>')
if hasattr(Student,num):   #判断输入的内容类中是否有,没有返回Flase,有返回True
    getattr(Student,num)()

(2). 对象 :方法,对象属性

class A():
    def __init__(self,name):
        self.name = name
    def func(self):
        print('in func')
a =A('alex')
print(a.name)
print(getattr(a,'name'))
getattr(a,'func')()

(3) 模块

import 模块
getattr (模块,'名字')

(4)自己文件

import sys 
getattr (sys.modules['__main__'],'名字')

三.内置方法:

__名字__  类中的特殊方法内置方法双下方法魔术方法

类中的每一个双下方法都有它自己的特殊意义,没有需要从外部直接调用的,而是

总有一些其他的 内置函数 特殊的语法 用来触发这些双下方法

(1)__call__

class A:
    def __call__(self,*args,**kwargs)
        print('执行call方法')
    def call(self)
        peint('执行call方法')
a = A()
a()  #对象()  相当于调用__call__方法
A()() 相当于实例化得到一个对象,在对对象() 和上面的方法一样

class B:
    def  __init__(self,cls):
        print('在实例化A之前做一些事情')
            self.a = cls()
            self.a()
            print('在实例化之后做一些事情')
B(A)

(2)__len__

class My:
    def__init__(self,s)
        self.s = s
    def __len__(self)
        return len(self.s)
my = my('abc')
print(len(my))

(3)__new__

单例模式:

如果一个类 从头到尾只能有一个实例,说明从头到尾之开辟了一块儿属于对象的空间,那么这个类就是一个单例类
lass Single:
     __ISINCTANCE = None
     def __new__(cls, *args, **kwargs):
         if not cls.__ISINCTANCE:
             cls.__ISINCTANCE = object.__new__(cls)
         return cls.__ISINCTANCE
     def __init__(self,name,age):
         self.name = name
         self.age = age

(4)__str__

 class Student:
     def __str__(self):
         return '%s %s %s'%(self.school,self.cls,self.name)

    def __init__(self,name,stu_cls):
         self.school = 'oldboy'
         self.name = name
         self.cls = stu_cls

 he = Student('hezewei','py14')
 print(he)
 huang = Student('huangdongyang','py14')
 print(huang)
 print(str(he))   # 内置的数据类型,内置的类,相当于执行__str__
 print('学生1 : %s'%he)
原文地址:https://www.cnblogs.com/ITdong-1/p/9397966.html