Стварэнне аб'екта з дапамогай круглых дужак пітона

Розніца паміж стварэннем асобніка аб'екта з дапамогай() і без дужак?

Выкажам здагадку, што гэта мой просты клас:

class ilist(list):
    t1 = "Test1"
    t2 = "Test2"

І робіць асобнікі ў гэтых двух зменных:

list1 = ilist()
list2 = ilist

Пры друку два асобніка

>>> list1
[]
>>> list2

Я магу паспяхова атрымаць доступ да іх атрыбутам

>>> list1.test1
'Test1'
>>> list2.test1
'Test1'

І гэта паказвае памылку ў list2 з дапамогай метаду Append

>>> list1.append("Item1")
>>> list2.append("Item1")
Traceback (most recent call last):
File "", line 1, in 
list2.append("Item1")
TypeError: descriptor 'append' requires a 'list' object but received a 'str'

У чым розніца не толькі ў гэтым простым прыкладзе?

0
Толькі адзін з іх стварае асобнік,
дададзена аўтар jamylak, крыніца

10 адказы

list1 = ilist() creates an object of the class. list2 = ilist makes a reference to the class itself. Classes are first-class objects in Python, which means they can be assigned just like any other object.

Паколькі атрыбуты з'яўляюцца часткай класа, яны таксама частка аб'ектаў, створаных з дапамогай гэтага класа.

7
дададзена

list1 = ilist() creates an object of the class. list2 = ilist makes a reference to the class itself. Classes are first-class objects in Python, which means they can be assigned just like any other object.

Паколькі атрыбуты з'яўляюцца часткай класа, яны таксама частка аб'ектаў, створаных з дапамогай гэтага класа.

7
дададзена

Вы не ствараеце асобнік аб'екта ў вашым другім прыкладзе. Вы проста прызначаючы клас IList ў зменную з імем песни2 , таму магнезіі (спіс) друкуе яго імя класа.

2
дададзена

Вы не ствараеце асобнік аб'екта ў вашым другім прыкладзе. Вы проста прызначаючы клас IList ў зменную з імем песни2 , таму магнезіі (спіс) друкуе яго імя класа.

2
дададзена

Калі вы не выклікаючы клас (Апускаючы () ), вы не робіце асобнікаў. Вы ствараеце іншую спасылку на класа . <�Код>() называе клас для атрымання асобніка.

Ваш песни2 пераменная проста спасылкі на ваш IList аб'ект класа. Гэты клас аб'ектаў мае як t1 і t1 атрыбуты, так што вы можаце спасылацца на іх. Але толькі песни1 з'яўляецца фактычным асобнікам, вырабляецца шляхам выкліку класа.

Пры пошуку атрыбутаў на прыкладзе, клас кансультацыі , а таксама . Так песни1 не мае t1 і 2 атрыбуты, але яго клас робіць .

Вы можаце азнаёміцца ​​з Python падручнік па класах зноў , каб убачыць, што розніца паміж класамі і экземплярамі.

2
дададзена

Калі вы не выклікаючы клас (Апускаючы () ), вы не робіце асобнікаў. Вы ствараеце іншую спасылку на класа . <�Код>() называе клас для атрымання асобніка.

Ваш песни2 пераменная проста спасылкі на ваш IList аб'ект класа. Гэты клас аб'ектаў мае як t1 і t1 атрыбуты, так што вы можаце спасылацца на іх. Але толькі песни1 з'яўляецца фактычным асобнікам, вырабляецца шляхам выкліку класа.

Пры пошуку атрыбутаў на прыкладзе, клас кансультацыі , а таксама . Так песни1 не мае t1 і 2 атрыбуты, але яго клас робіць .

Вы можаце азнаёміцца ​​з Python падручнік па класах зноў , каб убачыць, што розніца паміж класамі і экземплярамі.

2
дададзена

Каб растлумачыць фактычнае паведамленне пра памылку: Той жа метад выклікаецца ў другім прыкладзе, але метады павінны атрымаць самастойна у якасці першага аргументу. Калі вы тэлефануеце з дапамогай асобніка, ён будзе перададзены ў якасці першага аргументу; але тут вы карыстаецеся клас, таму ён павінен быць перададзены ў відавочным выглядзе.

Вы перадаеце «Item1» у якасці першага аргументу, але гэта радок, а не IList .

1
дададзена

Каб растлумачыць фактычнае паведамленне пра памылку: Той жа метад выклікаецца ў другім прыкладзе, але метады павінны атрымаць самастойна у якасці першага аргументу. Калі вы тэлефануеце з дапамогай асобніка, ён будзе перададзены ў якасці першага аргументу; але тут вы карыстаецеся клас, таму ён павінен быць перададзены ў відавочным выглядзе.

Вы перадаеце «Item1» у якасці першага аргументу, але гэта радок, а не IList .

1
дададзена

(Амаль) усё гэта аб'ект у Python, так што песни1 = IList() з'яўляецца аб'ектам тыпу IList і IList і песни2 = IList з'яўляюцца аб'ектамі тыпу тыпу

0
дададзена

(Амаль) усё гэта аб'ект у Python, так што песни1 = IList() з'яўляецца аб'ектам тыпу IList і IList і песни2 = IList з'яўляюцца аб'ектамі тыпу тыпу

0
дададзена