Pythonic Möglichkeit zum dynamischen hinzufügen von Eigenschaften und setter

Arbeite ich an einer Bibliothek für eine 3D-Anwendung, umschließt die Funktionalität der Anwendung in einer Reihe von Python-Klassen, sowie zusätzliche Funktionen hinzufügen, dass die Anwendung nicht.

Habe ich eine Reihe von Eigenschaften, die in meine base-Klasse zum hinzufügen von Attributen zu einem Knoten mit der vorhandenen API, aber ich möchte eine weitere elegante Möglichkeit, hinzufügen von Attributen dynamisch. Ich habe momentan diesen code (die wahrscheinlich nicht viel Sinn, ohne Vertrautheit mit der 3D-Anwendung), aber der wichtige Teil ist die

# Add block properties

und

# PROPERTIES

code.

class Block(pyunify.Transform):
    def __init__(self, name = "Character"):
        pyunify.Transform.__init__(self, name)
        self.LockTransform()


class Spine(Block):
    def __init__(self, name = "Character", numberOfJoints=6):
        Block.__init__(self, name+"_spine")

        # Add block properties
        self.AddAttr("numberOfJoints", "long")
        self.SetAttr("numberOfJoints", numberOfJoints)

        # Create block template
        self.Template()

    # PROPERTIES
    @property
    def numberOfJoints(self):
        return self.GetAttr("numberOfJoints")

    @numberOfJoints.setter
    def numberOfJoints(self, num):
        self.SetAttr("numberOfJoints", num)

So, ich könnte vorhersehen, zusätzliche Klassen mit viel mehr Eigenschaften, und die Art und Weise, ich habe es jetzt, für jede Eigenschaft muss ich hinzufügen, dass es in _init__

self.AddAttr("numberOfJoints", "long")
self.SetAttr("numberOfJoints", numberOfJoints)

und dann habe ich 2 weitere Funktionen in meiner Klasse, eine getter-und setter, die Eigenschaft also, die ich nennen kann, die in meiner Klasse als du selbst.numberOfJoints und es wird die Interaktion mit der Klasse selbst sowie das korrekte einstellen von Parametern, die für den betreffenden Knoten in der 3D-Anwendung.

    @property
    def numberOfJoints(self):
        return self.GetAttr("numberOfJoints")

    @numberOfJoints.setter
    def numberOfJoints(self, num):
        self.SetAttr("numberOfJoints", num)

Der einzige Unterschied mit der zusätzlichen Eigenschaft Funktionen werden der name, so war ich Frage mich, ob es war ein Weg, ich könnte einen AddProperty-Funktion in meinem base-Block-Klasse so, dass ich nur das in meiner _init__ Funktion:

self.AddProperty("numberOfJoints", "long")
self.numberOfJoints = 5

und es wird dynamisch erzeugen der getter-und setter-Funktionen zusätzlich zu der Ausführung der aktuellen _init__ Zeile

self.AddAttr("numberOfJoints", "long")

Jede mögliche Hilfe würde geschätzt!

Dank!

  • Sind Sie gerade versuchen zu tun self.numberOfJoints = numberOfJoints?
  • Ich versuche zu tun self.numberOfJoints = numberOfJoints wo Sie das Attribut, wird eine zusätzliche Funktion: self.AddAttr("numberOfJoints", "long"); self.SetAttr("numberOfJoints", self.numberOfJoints) und andere code
InformationsquelleAutor David | 2015-04-10
Schreibe einen Kommentar