第八章 元类或动态创建类

1 类模板操作
class obj:
    pass
# print(obj)
x=obj()
# print(x)
#例1 类的内省
#通过类添加属性
obj.xname='张三'


b=hasattr(x,'xname')
print(b)


y=obj()
b=hasattr(x,'xname')
print(b)
# 通过类名赋值给另一个变量
xx=obj
#通过xx创建类对象
v1=xx()
print(v1.xname)

 2 动态地创建类
 2.1 type()函数
 1)type(对象)函数返回对象的类型描述
 v='88'
d=type(v)
 print(str(d))
 2)通过type()动态创建类
 语法:类模板=type('类名',([父类a,父类b,..]),{属性名:})
class stu(object):
     sname='张三男'
#     def info(self):
#         print('你好,{}'.format(self.sname))
#事先定义类中方法的模板
# def info(this):
#     print('你好吗?{}'.format(this.sname))
# #动态生成的类模板
# typestu=type('Stu',(),{'sname':'张三男','say':info})
# #创建了类对象x
# x=typestu()
# print(x.sname)
# x.say()
  3) 静态方法和类方法的区别
# 静态方法使用@staticmethod标识,不能使用参数表示当前类对象;类方法的第一个参数
# 代表类对象本身,可以使用@classmethod标识
class Stu:
    age=None
    #静态方法使用@staticmethod标识,不能使用参数表示当前类对象
    @staticmethod
    def ok1(self):
        self+=8
        #通过命名空间引用属性
        Stu.age=self
        return self
    @classmethod
    def ok2(self):
        self.sname='apple'
# 创建了一个对象
s=Stu()
y=s.ok1(8)
print(s.age)
s.ok2()
print(s.sname)

猜你喜欢

转载自blog.csdn.net/wshsdm/article/details/80236461
今日推荐