Discuss / Python / 讨论一下

讨论一下

Topic source

___Hiboboo

#1 Created at ... [Delete] [Delete and Lock User]
# -*- coding: utf-8 -*-


# self参数必须要存在,否则type函数无法将其设置为新创建类的内部方法?
def set_name(self, name):
    print("Student name is %s" % name)


# 这种命名没有问题,说明Python没有类名校验机制,总之这种方式挺奇怪的
Student = type("Teacher", (object,), dict(get_name=set_name))
s = Student()
s.get_name("Bob")
# 虽然上边新创建的Teacher类被指向了Student,但s依然是Teacher,不知道这种该怎么解释?
print(type(s))


class Person(object):

    def __init__(self, name):
        self.__name = name

    def __str__(self):
        return self.__name

    def get_name(self):
        return self.__name

    __repr__ = __str__


class PersonMetaclass(type):

    def __new__(cls, name, bases, attrs):
        attrs["getName"] = lambda self: self.get_name()
        return type.__new__(cls, name, bases, attrs)


class Boss(Person, metaclass=PersonMetaclass):
    pass


b = Boss("Jerry")
print(b.getName())
p = Person("Tom")
print(p.getName())

  • 1

Reply