在python中如何从单个类继承一个类的多个实例
免责声明:我是编程新手,刚刚开始学习类和继承,所以可能是我缺乏理解导致了我的问题 我在不同的文件在python中如何从单个类继承一个类的多个实例,python,class,inheritance,Python,Class,Inheritance,免责声明:我是编程新手,刚刚开始学习类和继承,所以可能是我缺乏理解导致了我的问题 我在不同的文件person.py和address.py中创建了两个类 person类继承自address类,但是一个人可以有多个地址(邮政、物理等)。如何为每种类型继承address类的多个实例 我的目标是最终为未来的项目建立一个公共类库,因此非常感谢围绕这个概念提供的任何帮助或建设性意见 我希望能够创建如下代码,其中邮政地址和物理地址都使用地址类: employee = Person() employee.set
person.py
和address.py
中创建了两个类
person类继承自address类,但是一个人可以有多个地址(邮政、物理等)。如何为每种类型继承address类的多个实例
我的目标是最终为未来的项目建立一个公共类库,因此非常感谢围绕这个概念提供的任何帮助或建设性意见
我希望能够创建如下代码,其中邮政地址和物理地址都使用地址
类:
employee = Person()
employee.set_postal_address("342 Gravelpit Terrace","Bedrock")
employee.set_physical_address("742 Evergreen Tce", "Springfield")
下面是我的代码,我没有在Person()
类中创建任何对Address()
的引用,因为我不确定如何实现这一点
# address.py
class Address:
def __init__(self):
self.__line1 = None
self.__line2 = None
self.__town_city = None
self.__post_code = None
self.__state_region = None
self.__country = None
# Line 1
def get_line1(self):
return self.__line1
def set_line1(self, line1):
self.__line1 = line1
#etc....
非常感谢您的帮助。如果有更好的处理方法,请告诉我 创建类
Person
时,您不必继承地址。实现目标的一种方法是初始化Person
类中的Address
类对象
# address.py
class Address:
def __init__(self, **kwargs):
self.__line1 = kwargs.get('__line1')
self.__line2 = kwargs.get('__line2')
self.__town_city = kwargs.get('__town_city')
self.__post_code = kwargs.get('__post_code')
self.__state_region = kwargs.get('__state_region')
self.__country = kwargs.get('__country')
# Line 1
def get_line1(self):
return self.__line1
def set_line1(self, line1):
self.__line1 = line1
#etc....
这允许您防止继承的方法在给定的类对象中变得混乱,但仍然允许您保持良好的类结构
然后,您可以执行以下操作:
bob=Person(__first_name='Bob', __last_name='Smith')
bob.set_postal_address(__line1='42 Wallaby Way', __town_city='Sydney')
# Since we are using kwargs.get() any not specified Kwarg comes out as None.
# Now `__postal_address` is its own Address class and comes with Address methods
bob.__postal_address.set__line2('Apt 3B')
现在,有时您希望从更高级别的类继承公共方法。您可以在此处阅读有关python类的更多信息:()无需继承。另外,getter和setter在很大程度上被认为是不和谐的。谢谢你的回复。我之所以使用get
和set
方法,是因为我听说在类外更改/调用变量不是一种好的做法。你能告诉我应该如何引用这些变量吗?我相信你可以直接引用它们。顺便说一句,为什么使用双下划线?双下划线是一种使变量私有的方法,即在类之外不可访问。这就是为什么我需要使用get
和set
来访问它们。我这样做的原因是,我听说我不应该直接从课堂外访问变量。我将写一个答案,这应该能更清楚地解释事情:)谢谢@conmak的回答。如何使用设置邮政地址()
??我尝试了以下代码bob=Person()
bob.设置邮政地址(“123 Main Street”,“Townsville”)
但是我收到一个错误“方法调用的位置参数太多”是的,这是我的错误。编辑了对帐户的响应,以将kwargs添加到初始in地址。
# person.py
from address import *
class Person:
def __init__(self, **kwargs):
self.__first_name = kwargs.get('__first_name')
self.__last_name = kwargs.get('__last_name')
self.__postal_address = None
self.__physical_address = None
def set_postal_address(self, **kwargs):
# use the address class
self.__postal_address = Address(**kwargs)
def set_physical_address(self, **kwargs):
# use the address class
self.__physical_address = Address(**kwargs)
#etc...
bob=Person(__first_name='Bob', __last_name='Smith')
bob.set_postal_address(__line1='42 Wallaby Way', __town_city='Sydney')
# Since we are using kwargs.get() any not specified Kwarg comes out as None.
# Now `__postal_address` is its own Address class and comes with Address methods
bob.__postal_address.set__line2('Apt 3B')