簡體   English   中英

Python繼承:從子類創建父類對象

[英]Python inheritance: Create parent class object from child class

我有一組班級,其中孩子是從父母那里派生的。 我試圖實現的是創建一個父類的對象,該對象從子類的對象獲取所有值。 我發現的唯一方法是:

from copy import deepcopy
class Parent(object):
    def __init__(self, value):
        self.val = value

class Child(Parent):
    def __init__(self, val=8):
         super(Child, self).__init__(val)
         chval=5
par=Parent(3)
ch=Child()
parent= Parent(4)
parent.__dict__ = deepcopy(super(Child, ch).__dict__)
print(parent.val)
print(type(par), type(ch), type(parent))

輸出確實是

8
(<class '__main__.Parent'>, <class '__main__.Child'>, <class '__main__.Parent'>)

但我不確定這是否是一種很好的,Python風格且無風險的方法

問題 :如何用Rectangle的基本Figure屬性創建一個Circle “”

您可以通過在基class Figure實現new_from方法來實現。
例如:

class Figure:
    def __init__(self, p):
        self.properties = p

    @classmethod
    def new_from(cls, obj):
        if issubclass(obj.__class__, Figure):
            _new = cls(obj.properties)
            return _new
        else:
            raise TypeError('Expected subclass of <class Figure>, got {}.'\
                                .format(type(obj)))

    def __repr__(self):
      return "<class '{}' properties:{}"\
                .format(self.__class__.__name__, self.properties)

class Rectangle(Figure):
    pass    

class Circle(Figure):
    pass

r1 = Rectangle({'test': 'r1.property'})
r2 = Rectangle.new_from(r1)
c1 = Circle({'test': 'c1.property'})
c2 = Circle.new_from(r1)

for obj in [r1, r2, c1, c2]:
    print(obj)  # '{}\n{}'.format(obj, obj.__dict__))

輸出

 <class 'Rectangle' properties:{'test': 'r1.property'} <class 'Rectangle' properties:{'test': 'r1.property'} <class 'Circle' properties:{'test': 'c1.property'} <class 'Circle' properties:{'test': 'r1.property'} 

使用Python測試:3.6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM