班级的工作方式
问题描述:
我想弄清楚一个非常简单的问题,但仍然无法完全理解班级的工作方式。例如,如果我想用名为“name”的属性创建一个名为“Friend”的类,这是否意味着我必须在其他任何东西之前给一个名为“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
答
该代码不是废话,因为它可以完成您想要完成的任务。尽管如此,它并不是很pythonic。没有理由你应该使用getter或setter。只需直接访问属性。像
class Friend:
def __init__(self,name):
self.name = name
您可以通过
friend = Friend('jeremy')
instantiate类现在只需访问name
直接
print friend.name # jeremy
有一个良好的金额,以了解Python类幸亏Python提供无论如何,优秀的documentation您正在使用的rsion。
在这个例子中,要创建一个新朋友,你需要用一个名字来实例化它。
答
你指的是默认的关键字参数。您在示例中指定它的方式意味着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()
正如意见建议,它不是“被认为是pythonic”来让setter和getters获得一个基本属性。但是,如果该属性需要计算,那么你可以把它的属性:
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'
http://www.diveintopython.net/object_oriented_framework/defining_classes.html#d0e11720 –