python基础十——继承、多态、封装

2018-03-05  本文已影响8人  我想走走
class Class1:
    money = 10
    def __init__(self,name):
        self.name = name
        print('我是父类,执行了')
    def method1(self):
        print('555555555555555')
class Class2(Class1):
    money = 1000
    #私有的变量(封装)
    __star = 'fengzi'
    def __init__(self,name,age):
        #调用父类的方法
       # Class1.__init__(self,name)
        super().__init__(name)
        self.age = age
        print('我是子类,执行了')
    def method1(self):
        # 调用父类的方法
        #Class1.method1(self)
        super().method1()
        print('66666666666666')
    def method_new(self):
        print(self.__star)
print(Class2.money)
# Class2.method1()
s1 = Class2('fengfeng',18)
s1.method1()
#可以通过这种方式访问私有属性
print(Class2._Class2__star)
print(Class2.__dict__)
#还可以间接访问
Class2.method_new(s1)

反射

class Class_a:
    faker = 'fake'
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr[图片上传中...(NA@2NE]{((6OW4G%8[))8G6.png-94664-1520230442274-0)]

    def method1(self):
        print('5556')
    def method2(self):
        print('6666')
b1 = Class_a('xiye','shanghai')
print(hasattr(b1,'name'))
print(hasattr(b1,'method1'))
print(getattr(b1,'name','名字'))
print(getattr(b1,'method1','方法一'))
func = getattr(b1,'method1','方法1')
func()
setattr(b1,'xiaoming','a')
print(b1.__dict__)
delattr(b1,'name')
print(b1.__dict__)

setattr(b1,'func1',lambda x:x+1)
print(b1.__dict__)
print(b1.func1(10))
1.png

动态导入模块

# from m1 import t
# t.test1()

#返回的永远是最顶层的模块
# module_t = __import__('m1.t')
# print(module_t)
# module_t.t.test1()
#
# #from m1.t import *
# #私有化之后这样可以调用,没有绝对的私有
# from m1.t import test1,_test2
# test1()
# _test2()

#导入方式
#直接能拿到对应的模块
import importlib
a = importlib.import_module('m1.t')
print(a)
a.test1()
a._test2()
上一篇下一篇

猜你喜欢

热点阅读