python_面向对象(二)

class A():
    def bar(self):
        print("bar")
        #这里面的self相当于c,也就是从D 开始重新找
        self.f1()
class B(A):
    def f1(self):
        print("b")
class C():
    def f1(self):
        print("c")

class D(C,B):
    pass

c=D()
c.bar()
》》》
bar
c

c调用父类的构造方法

class Animal():
    def __init__(self):
        self.ti = "动物"
        print("1")



class Cat(Animal):
    def __init__(self):
        self.a="猫"
        print(2)
        #将对象c根据self导入Animal
        super(Cat, self).__init__()
        #Animal.__init__(self)


c=Cat()
++++++++++++++反射++++++++++++++++++++++

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


obj = Foo('alex')

#反射:类,只能找类里面的成员(__init__,show)
#以字符串的形式
r = hasattr(Foo,"name")
print(r)
#反射:对象,全能
#以字符串的形式
r = hasattr(obj,"name")
print(r)
》》》
False
True
从上面可以看出来。利用反射,当反射的条件是的时候只能返回类里面的方法,当用对象的时候返回的是属性加方法

 二

上面的文件的包名叫做__init__  ,引出下面的例子

#导入文件
m = __import__("__init__",fromlist=True)
#导入类
class_name = getattr(m,'Foo')
#得到对象
obj=class_name("Aexl")
#得到对象属性
val = getattr(obj,"name")
#打印
print(val)

》>>
Aexl


猜你喜欢

转载自blog.csdn.net/Py_CCY/article/details/76321667