当前位置: 首页 > 面试题库 >

我们可以重载类对象的行为吗?

柳宾实
2023-03-14
问题内容

我知道我们可以重载类实例的行为,例如-

class Sample(object):  pass
s = Sample()
print s
<__main__.Sample object at 0x026277D0>
print Sample
<class '__main__.Sample'>

我们可以更改的结果print s:

class Sample(object):
  def __str__(self):
    return "Instance of Sample"
s = Sample()
print s
Instance of Sample

我们可以更改结果print Sample吗?


问题答案:

您可以使用元类:

class SampleMeta(type):
    def __str__(cls):
        return ' I am a Sample class.'

Python 3:

class Sample(metaclass=SampleMeta):
    pass

Python 2:

class Sample(object):
    __metaclass__ = SampleMeta

输出:

I am a Sample class.

元类是类的类。它与类的关系类似于类与实例的关系。使用相同的class语句。type而是从继承表单object使其成为一个元类。按惯例self由代替cls。



 类似资料:
  • 问题内容: 我有一些经常被调用的代码,将它们声明为变量是否有意义? 在这种情况下将动态参数传递给方法是否安全? 问题答案: 不, 它们不是线程安全的,请改用Joda-time的版本 。 或者将它们包装在同步方法中,并使其成为线程安全的 博士说得很清楚 日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一种格式,则必须在外部进行同步。

  • 问题内容: 我们可以重载Java中的方法吗? 问题答案: 您 可以 重载该方法,但仅在JVM启动您的类时使用。例如: 从命令行运行时,即使指定一个或两个命令行参数,该命令也 始终会 打印。 当然,您可以从代码中自己调用该方法-此时将应用常规的重载规则。 编辑:请注意,您可以使用varargs签名,因为从JVM的角度来看,这是等效的:

  • 我们可以使用页面对象执行滚动吗? 实际上,我需要根据元素滚动网页(向上/向下)。如何使用页面对象执行。 我使用Selenium web drive来启动浏览器,并使用Page对象来自动化web页面。 有什么建议吗???

  • 问题内容: 我想在Java Web服务类中实现方法重载,如下所示: 如果将单个对象转发到,则它应触发第一个方法,如果发送s 数组,则应触发第二个方法。 在WSDL文件中,它仅显示一种方法。但是,如果我尝试同时调用这两个调用,则无法生成WSDL文件。 问题答案: 操作重载是 不是 允许网络服务。WS- BP中 明确禁止使用它,并且WSDL 1.2也不允许这样做。 即使您找到了对此有一些支持的堆栈,我

  • 问题内容: 在我的一次采访中,有人问我“我们是否可以实例化一个抽象类?” 我的回答是“不,我们不能。” 但是,面试官告诉我“错了,我们可以。” 我对此有些争论。然后他告诉我自己在家尝试这个。 在这里,我正在创建我的类的实例和抽象类的调用方法。有人可以向我解释一下吗?面试中我真的错了吗? 问题答案: 在这里,我正在创建我的课程的实例 不,你不是在这里创建抽象类的实例。而是要创建抽象类的匿名子类的实例

  • 问题内容: 我读过我们只能通过继承抽象类来实例化它,但是我们不能直接实例化它。 但是,我看到我们可以通过调用另一个类的方法来创建具有抽象类类型的对象。 例如- 是一个抽象类,我们可以通过在该类中调用function 来实例化它: 抽象类如何在这里实例化? 问题答案: 您不能直接实例化一个抽象类,但是可以在没有具体类的情况下创建一个匿名类: 这也适用于接口。