Python 以下声明的类别atributes不正确吗?

Python 以下声明的类别atributes不正确吗?,python,class,Python,Class,什么时候以及为什么有人会编写如下类: 1。 类别类别: name=None 年龄=无 定义初始(自我、姓名、年龄): self.name=名称 self.age=年龄 而不是简单的: 2。 类别类别: 定义初始(自我、姓名、年龄): self.name=名称 self.age=年龄 或具有常规类属性: 3。 类别类别: 物种=‘哺乳动物’ 定义初始(自我、姓名、年龄): self.name=名称 self.age=年龄 你会用#1吗。例子 你认为它是正确的吗?< /P>除非代码中的某个地方

什么时候以及为什么有人会编写如下类:

1。
类别类别:
name=None
年龄=无
定义初始(自我、姓名、年龄):
self.name=名称
self.age=年龄
而不是简单的:

2。
类别类别:
定义初始(自我、姓名、年龄):
self.name=名称
self.age=年龄
或具有常规类属性:

3。
类别类别:
物种=‘哺乳动物’
定义初始(自我、姓名、年龄):
self.name=名称
self.age=年龄
你会用#1吗。例子

你认为它是正确的吗?< /P>除非代码中的某个地方具体指的是<代码> CAT。Name < /代码>和<代码> CAT.AGE <代码>,它们只是不必要的噪声。类属性与实例属性没有任何关系。@chepner-如果对象的命名空间不满足变量引用,则它们会返回类。假设类级别也定义了
foo=“bar”
,那么
print(self.foo)
将使用它。在此
\uuuu init\uuuu
中,您可以执行类似于
self.name=name if name else self.name
的操作,这将是一种不同的默认赋值方式,而不仅仅是将默认值放入init签名中。您可以在类加载时动态决定默认值(可能读取.ini文件)。不确定这是否是一个好主意,但可能。是的,但仅当实例属性不存在时。您不能将类属性与不存在的事物相关联。@chepner-不确定您的意思
self.name
可以是实例或类属性。因此,可以将class属性与不存在的实例属性相关联。这就是python中使用回退逻辑的原因-如果实例属性不存在,则回退到相关的类属性。
self.name
是一个可以解析为实例属性或类属性的表达式。这并不意味着这两个属性是相关的。我见过有人使用类属性作为不存在的实例属性的“默认”值吗?对我见过有人推荐这样做吗?不是。除非代码中的某个地方特别提到
Cat.name
Cat.age
,否则它们只是不必要的噪音。类属性与实例属性没有任何关系。@chepner-如果对象的命名空间不满足变量引用,则它们会返回类。假设类级别也定义了
foo=“bar”
,那么
print(self.foo)
将使用它。在此
\uuuu init\uuuu
中,您可以执行类似于
self.name=name if name else self.name
的操作,这将是一种不同的默认赋值方式,而不仅仅是将默认值放入init签名中。您可以在类加载时动态决定默认值(可能读取.ini文件)。不确定这是否是一个好主意,但可能。是的,但仅当实例属性不存在时。您不能将类属性与不存在的事物相关联。@chepner-不确定您的意思
self.name
可以是实例或类属性。因此,可以将class属性与不存在的实例属性相关联。这就是python中使用回退逻辑的原因-如果实例属性不存在,则回退到相关的类属性。
self.name
是一个可以解析为实例属性或类属性的表达式。这并不意味着这两个属性是相关的。我见过有人使用类属性作为不存在的实例属性的“默认”值吗?对我见过有人推荐这样做吗?不