将方法输出输入到类对象中

时间:2012-11-15 13:01:46

标签: python

我正在尝试直接将从domeinnaamemailadres()生成的数据输入到特定的类对象中,例如a。我希望将数据输入到domeinnaam属性中。我该怎么做?

class Customer:
    "De klasse customer"

    def __init__(self, naam, adres, woonplaats, email, domeinnaam= ""):
        self.naam = naam
        self.adres = adres
        self.woonplaats = woonplaats
        self.email = email
        self.domeinnaam = domeinnaam      

    def domeinnaamemailadres(self):
        c = self.email[self.email.find("@"):]


a = Customer('Name1', 'address', 'Utrecht', 'Email1@hotmail.com', domeinnaamemailadres)
b = Customer('Name2', 'Bonestaak', 'Maarssen', 'Bijjaapishetaltijdraakhotmail.com')

2 个答案:

答案 0 :(得分:1)

您无法以这种方式调用该方法,因为在您调用它时该实例不存在。

可能你想做点什么:

class Customer:
    "De klasse customer"

    def __init__(self, naam, adres, woonplaats, email, domeinnaam= ""):
        self.naam = naam
        self.adres = adres
        self.woonplaats = woonplaats
        self.email = email
        self.domeinnaam = domeinnaam
        if not self.domeinnaam:
            #domeinnaam not provided, build one using self.email
            self.domeinnaam = self.domeinnaamemailadres()


    def domeinnaamemailadres(self):
        return self.email[self.email.find("@"):]


a = Customer('Name1', 'address', 'Utrecht', 'Email1@hotmail.com')
b = Customer('Name2', 'Bonestaak', 'Maarssen', 'Bijjaapishetaltijdraakhotmail.com')

您可以使用三元运算符避免使用if语句:

self.domainnaam = domeinnaam if domeinnaam else self.domeinnaamemailadres()

我想对您的代码做一些评论。

  1. 首先,尝试用英文写作。因此,请使用英文变量名称。[name not naam等。]
  2. 有些名字真的很模糊。 domeinnaamemailadres做了什么?我称之为domain_name_from_email_address
  3. 文档字符串"De klasse customer"完全没用。它不会向class Customer行添加任何信息,也不会使用英语。
  4. 你为什么要用英文写作?首先,因为如果你不这样做,那么你如何在像StackOverflow这样的地方寻求帮助?在这个特定的情况下,代码很简单,无论如何我都明白,但如果事情变得复杂,那么我就无法得到你想做的事。

    其次,英语是计算机科学的 语言。这是你真正必须学习和使用的东西,只要你写的东西被其他人读取的可能性很小。因为这个原因,我从不用母语(意大利语)编写代码。 即使你认为你永远不会向任何人展示代码,你可能总是会遇到一个错误并且需要向其他人询问(例如在StackOverflow或某些论坛/邮件列表上)和 bam

答案 1 :(得分:1)

为什么不改变这一行:

self.domeinnaam = domeinnaam      

对此:

self.domeinnaam = domeinnaam if domeinnaam else email[email.find("@"):]

那里不需要其他函数,你可以使用参数,因为它仍在范围内。这也将domeinnaam arugment分配给你的成员变量(如果存在),否则它将使用email参数中的域名,允许你删除以下检查和功能。