python基础(二十七)—面向对象进阶(一)

isinstance 对象与类之间的关系

  判断第一个参数是否是第二个参数的实例

class A:
    pass
class B:
    pass
b = B()
a = A()
print(isinstance(a,A))
print(isinstance(b,A))
isinstance

issubclass 类与类之间的关系

  第一个参数是疑似子类,第二个参数是疑似父类,最终结果如果是父子关系则返回True,反则返回False

class A:
    pass
class B(A):
    pass
print(issubclass(A,B))
print(issubclass(B,A))
issubclass

反射

  反射的定义:通过字符串来操作python代码中的变量,函数,甚至类和方法

  getattr

    直接过去一个变量中的名字的值getattr(类名,属性)如果第二个参数是不存在的属性,则会报错

class A:
    a = 666
    # def __init__(self,name,age):
    #     self.name = name
    #     self.age = age
    def b(self):pass
a = A()
print(getattr(A,'a'))
print(getattr(A,'b'))
getattr

  hasattr

    判断属性是否在类中与getarrt合用

class A:
    a = 666
    def b(self):pass
a = A()
print(hasattr(A,'c'))

# 与getattr合用
if hasattr(A,'a'):
    print(getattr(A,'a'))
hasattr

    应用场景:网络编程

setattr(对象,属性,参数)  添加一个属性,修改一个属性

class A:
    a = 666
    b = 777
f = A()
setattr(f,'c',888)
print(f.__dict__)
setattr

delattr(对象,属性)  删除一个属性

class A:
    a = 666
    b = 777
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def fun(self):pass
f = A('alex',18)
delattr(f,'name')
print(f.__dict__)
delattr

内置方法:是直接和python的语法隐形相关

__len__和__eq__

class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __len__(self):
        return len(self.__dict__)
a = A()
print(len(a))
__len__
class A:
    def __init__(self):
        self.a = 1
        self.b = 2
    def __eq__(self,obj):
        if  self.a == obj.a and self.b == obj.b:
            return True
a = A()
b = A()
print(a == b)
__eq__

__format__格式化输出

format_dict={
    'nat':'{obj.name}-{obj.addr}-{obj.type}',#学校名-学校地址-学校类型
    'tna':'{obj.type}:{obj.name}:{obj.addr}',#学校类型:学校名:学校地址
    'tan':'{obj.type}/{obj.addr}/{obj.name}',#学校类型/学校地址/学校名
}
class School:
    def __init__(self,name,addr,type):
        self.name=name
        self.addr=addr
        self.type=type

    def __format__(self, format_spec):
        return format_spec.format(obj=self)

s1=School('oldboy1','北京','私立')
print(format(s1,format_dict['tna']))
print(format(s1,format_dict['nat']))
print(format(s1,format_dict['tan']))
__format__

__str__和__repr__

repr是str的备胎

 

  

posted @ 2018-03-12 17:20  小黑啊小黑  阅读(52)  评论(0)    收藏  举报