只有在__init __()中没有定义参数时,如何在方法中定义参数?

时间:2018-01-22 04:39:28

标签: python oop methods initialization arguments

例如,我想创建一个可以使用或不使用初始化变量来执行不同操作的类,但我希望保持灵活性,以便在没有该参数的情况下创建类时,可以使用方法稍后。我有:

class Kickass(object):

    def __init__(self, website=None)
        if website:
            self.website = website

    def kick_butt(self):

        # Can do stuff even if website == None
        return stuff

    def web_scrape(self, site=None):

        if site:
            try:
                self.website == None
            except ValueError:
                print('Class instance already has a website!')
        # Do operations with method's argument

        if not site:
            if self.website == None:
                raise ValueError('Neither method nor instance have defined a website!')
            else:
            # Do operations with instance's variable

我在课程和处理异常方面仍然很糟糕。提前感谢您的意见。

1 个答案:

答案 0 :(得分:1)

除非行为实际上是例外,否则你不应该抛出预期。在你的情况下,你似乎想要检查一个案例,并根据这一点改变你的行为。所以请检查

if self.website is not None:
    DoThisThing
else:
    DoTheOtherThing

你的尝试/除外没有像你期望的那样工作的原因是try / except不像if / else那样工作。

相反,try / except将首先尝试在try块中运行代码。如果代码运行正常,那么除了跳过并继续。但是如果代码抛出并Exception,那么它将运行捕获该特定异常的except块。

您的try块如下所示:

try:
    self.website == None

现在,如果self.website为None,则try块中的代码将解析为True。这不是一个例外,因此不会执行except块。如果self.website不是none,则此块将解析为False,这也不是例外,因此except块不会运行。

现在,如果您的try块看起来像这样:

try:
    len(self.website)

try中的代码会抛出TypeError: object of type 'NoneType' has no len()

所以,如果你跟着

except TypeError:
    print("This will run now")

你的except块会执行。

使用try / except来处理代码抛出的异常(通常在运行时数据与预期的不同时)。在正常操作情况下使用if / else指定意外事件。