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的具体属性, 比如黄色的毛发
前者是抽象属性, 后者是具象属性
回答:
首先__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