我可以在构造函数方法之外声明Python类字段吗?

问题描述 投票:1回答:3

我是Python的新手(我来自Java),对类字段有以下疑问。

考虑这样的代码:

class Toy():
    def__init__(self, color, age):
        self.color = color
        self.age = age

action_figure = Toy('red', 10)

确定,这很清楚并且非常简单:

它正在定义Toy类。在构造函数中,方法是定义两个字段以及如何设置字段值。最后(在“主”中)将创建一个新的Toy实例,该实例在构造函数调用中传递字段的值。

好吧,清楚...但是我有一个疑问。在Java中定义相同的类,我这样做:

public class Toy {
    private String color;
    private int age;

    // CONSTRUCTOR:
    public Dog(String color, int age) {
        this.color = color;
        this.age = age;
    }
}

好吧,这很相似,但我想出了很大的不同。在我的Java语言环境中,我将类字段声明为构造函数方法之外的变量。在Python中,我直接在构造方法中定义类字段。因此,这意味着在Java中,我可以声明n个类字段,并使用构造函数方法仅初始化该字段的子集,例如:

public class Toy {
    private String color;
    private int age;
    private String field3;
    private String field4;
    private String field5;

    // CONSTRUCTOR:
    public Dog(String color, int age) {
        this.color = color;
        this.age = age;
    }
}

其中还有field3

field4field5字段,这些字段不会由我的构造方法初始化(以防我可以使用setter方法第二次设置theyr值) 。

我可以在Python中做类似的事情吗?我可以在构造方法之外声明类字段吗?

我是Python的新手(我来自Java),对类字段有以下疑问。考虑这样的代码:类Toy():def__init __(self,color,age):self.color = ...

python python-3.x python-object
3个回答
3
投票

python类与c ++ / java中的类从根本上不同,因为c ++ / java类具有固定的数据结构和大小(字节),因为每个属性都在所有方法(通常作为私有变量)之外声明或定义,但在python中一切都在进行中(动态输入)。


2
投票

Python中实际上不需要此功能。您可以在Java中将您所谓的“实例变量”添加到类的实例中:


2
投票

在python中,您可以执行以下操作:


1
投票

由于Python是动态类型的,因此您无需事先声明变量,但是它们是在运行时初始化的。这也意味着您不必将实例属性添加到构造函数中,但是您可以在以后的任何时间添加它们。实际上,您可以将属性添加到任何对象,包括类对象本身。向构造器添加实例属性主要是一致性和可读性的问题。

© www.soinside.com 2019 - 2024. All rights reserved.