课程如何运作

2024-04-20 03:05:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图找出一个非常简单的问题,但我仍然不太明白一个类是如何工作的。例如,如果我想创建一个名为“Friend”的类,其中包含一个名为“name”的属性,这是否意味着我必须先给出一个名为“name”的变量?那么如何定义构造函数来允许“name”的规范呢?这代码是胡说八道吗?提前感谢您的回复

class Friend:

    def __init__(self,name):
        self.set_name(name)


    def set_name(self,name):
        self.name=name

    def get_name(self):
        return self.name

Tags: 代码nameself规范friendgetreturn属性
2条回答

这段代码不是胡说八道,因为它完成了您想要完成的任务。不过,这不是很像Python。没有理由使用getter或setter。直接访问属性即可。就像

class Friend:

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

你可以通过

friend = Friend('jeremy')

现在直接访问name

print friend.name # jeremy

有很多关于python类的知识需要学习,幸运的是python为您所使用的任何版本提供了优秀的documentation。你知道吗

在这个例子中,要创建一个新的朋友,你需要用一个名字来实例化它。你知道吗

您所指的是默认关键字参数。在示例中指定它的方式意味着构造函数中需要name。使其成为默认值(并且可以在构造函数之后设置)的方法如下所示:

class Friend(object):

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

    def set_name(self,name):
        self.name=name

    def get_name(self):
        return self.name

现在可以不使用名称实例化类:

aFriend = Friend()

正如在评论中所建议的,基本属性的setter和getter并不“被认为是pythonic”。但是,如果该属性需要计算,则可以将其设置为属性:

class Friend(object):

    def __init__(self, firstname='', lastname=''):
        self.firstname = firstname
        self.lastname = lastname

    @property
    def firstname(self):
        return self._first

    @firstname.setter
    def firstname(self, n):
        self._first = n.capitalize()

    @property
    def lastname(self):
        return self._last

    @lastname.setter
    def lastname(self, n):
        self._last = n.capitalize()        

    @property
    def fullname(self):
        return "{0} {1}".format(self.firstname, self.lastname)   

f = Friend('frank')
f.lastname = 'smith'

f.firstname
# 'Frank'

f.lastname
#'Smith'

f.fullname
#'Frank Smith'

相关问题 更多 >