Python 类写法的疑问

Python 类写法的疑问

为什么一定要这样的写法?
把那几个特征另外重新命名写到 __init__() 办法下面,而不是写在里面?

或者说像这样子写到 def 上面是错的:

class DogName:

"""类的帮助信息"""

beak_1 = "喙的基部较高,长度和头部的长度几乎相等"

wing_1 = "翅膀长而尖"

claw_1 = "爪子是蹼状的"

def __init__(self, beak, wing, claw):

print("我是大雁类!我有以下特征:")

print(beak)

print(wing)

print(claw)

DogName(beak_1, wing_1, claw_1)


回答:

写在类的__init__方法上是类属性, 比如Dog这个类的基础属性,比如毛发
通过__init__方法传入的是用于初始化实例的属性, 比如某只Dog的具体属性, 比如黄色的毛发
前者是抽象属性, 后者是具象属性


回答:

Python 类写法的疑问
首先__init__方法是类的构造方法,实例化类的时候默认就会执行该构造方法,你这里给__init__方法传递的3个参数,所以你实例化这个类的时候需要传递3个参数,你这里的beak_1等3个定义的是变量,已经不属于DogName这个类里面的东西了。你定义的这3个变量是为了实例化DogName这个类时传进去DogNmae(beak_1,...)。


回答:

python">class DogName:

"""类的帮助信息"""

beak_1 = "喙的基部较高,长度和头部的长度几乎相等"

wing_1 = "翅膀长而尖"

claw_1 = "爪子是蹼状的"

这种写法当然可以。但是此时beak_1、wing_1和claw_1是类属性。当前类的实例是可以访问类属性的。

但是类属性主要是在元编程的时候使用,提供创建类实例的一些元数据。比如使用ORM框架的时候:

class User(Model):

# 定义类的属性到列的映射:

__tablename__ = 'users'

id = IntegerField('id')

name = StringField('username')

email = StringField('email')

password = StringField('password')

当调用user = User()的时候,__new__方法会根据这些元数据创建一个实例,__init__方法是进行初始化。


回答:

解答一:

class DogName:

"""类的帮助信息"""

beak_1 = "喙的基部较高,长度和头部的长度几乎相等"

wing_1 = "翅膀长而尖"

claw_1 = "爪子是蹼状的"

def __init__(self, beak, wing, claw):

print("我是大雁类!我有以下特征:")

print(beak)

print(wing)

print(claw)

这里的定义是属于类内部的定义。可以在类的内部调用,但其实意义不大,因为题主你还在def __init__(self, beak, wing, claw):里定义了几个参数,这样的话在实例化类时都是需要加上这几个参数的。如:

DogName(1, 2, 3)

意思不大,除非题主将def __init__(self, beak, wing, claw):改成def __init__(self):,这样在类里设置的这几个类属性就定死了,不会受实例化的影响。
而这样有个缺点就是在修改这几个属性时比较麻烦,还需要通过设置类内部的其他属性和方法来进行修改。

解答二:

beak_1 = "喙的基部较高,长度和头部的长度几乎相等"

wing_1 = "翅膀长而尖"

claw_1 = "爪子是蹼状的"

DogName(beak_1, wing_1, claw_1)

这一个方法是外部实例化,通过自行设置实例化的参数,动态传入属性,比较灵活。


回答:

是一个抽象群体而不是个体,在外部传递参数是群体变成个体的过程,也叫实例化,一堆水果是个群体,传递参数长条形弯的时候,它就实例化成个体香蕉。所以在外部传递参数可以是抽象群体能实例成不同的个体,方便扩展。

以上是 Python 类写法的疑问 的全部内容, 来源链接: utcz.com/a/159497.html

回到顶部