你可以使用不是来自构造函数的新参数来赋予'self'吗?

时间:2014-05-10 23:15:21

标签: python

鉴于此课程:

class PythonClass():

    def  __init__(self,arg1='1',arg2='2')
        self.arg3 = '3'
        self.arg1 = arg1
        self.arg2 = arg2
        self.arg4 = arg3 + '1'

您可以指定self.arg3self.arg4还是会产生语法错误?

Taken from here

class Scapy80211():

    def  __init__(self,intf='wlan0',ssid='test',\
        source='00:00:de:ad:be:ef',\
        bssid='00:11:22:33:44:55',srcip='10.10.10.10'):
        self.rates = "\x03\x12\x96\x18\x24\x30\x48\x60"
        self.ssid    = ssid
        self.source  = source
        self.srcip   = srcip
        self.bssid   = bssid
        self.intf    = intf
        self.intfmon = intf + 'mon'

1 个答案:

答案 0 :(得分:0)

如果您运行该代码,您会发现它执行时没有语法错误,这会回答您的基本问题。

您可能想知道为什么 Python允许您对类的随机属性进行赋值,而不以任何方式声明这些属性的存在 - 正如您可能熟悉的其他语言所要求的那样。

这是因为在Python中,对象的属性集合本质上是一个字符串索引的值字典。属性赋值只是一个字典操作。如果字典已经具有指定的键(属性名称),则该值将替换为新分配的键。如果字典具有该键(即,该对象没有具有给定名称的属性),则键和值将添加到字典中。

回答你的下一个问题 - 是的,对象的不同实例因此可以具有与同一类的其他对象不同的属性。

回答你的下一个问题 - 是的,来自一种需要声明的类型属性的语言,这是一个非常不同的编程范例。