Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2020 21:46:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Классы

Kasta_neda
как мне обратиться к self.x ?
м-м-м- никак, у вас out_text @classmethod, он оперирует не инстансами класса , а самим классом, а “х” у вас атрибут истанса
Kasta_neda
я понять хочу как правильно делать. в таких ситуациях
ну тут есть несколько варинтов. Например вот так:
 class A:
    def __init__(self, other_obj):
        self.other_obj = other_obj
    def work(self):
        self.other_obj.out_text('blah-blah')
class B:
    def __init__(self):
        self.x = '1'
    def out_text(self, data, *args):
        print(self.x, data)
b=B()
a= A(b)
a.work()
>>> 
1 blah-blah
>>> 
или если один инстанс создаеться из другого:
 class A:
    def __init__(self, other_obj):
        self.other_obj = other_obj
    def work(self):
        self.other_obj.out_text('blah-blah')
class B:
    def __init__(self):
        self.x = '1'
    def run(self):
        a=A(self)
        a.work()
    def out_text(self, data, *args):
        print(self.x, data)
b=B()
b.run()
>>> 
1 blah-blah
>>>
думаю принцип понятен?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 25, 2020 21:52:02)

Офлайн

#2 Май 25, 2020 21:49:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Классы

Kasta_neda
Ваш код аналогичен вот этому.

  class A:
    
    def work(self):
       out_text(self, 'blah-blah')
  
def out_text(data, *args):
    print(data, args)

В статических методах нет смысла, если они не используют статические атрибуты класса.



Офлайн

#3 Май 25, 2020 21:57:31

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Классы

PEHDOM
FishHook
AD0DE412
xam1816

Спасибо всем за помощь!

Офлайн

#4 Май 26, 2020 13:21:34

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1396
Репутация: +  124  -
Профиль   Отправить e-mail  

Классы

 class A:
	def work(self):
		B.out_text(self, 'blah-blah')
class B:
	x = '3'
	def __init__(self):
		self.x = '1'
	@classmethod
	def out_text(cls, data, *args):
		print(cls, data, args)
		print(cls.x)  # как мне обратиться к  self.x ?
a = A()
a.work()

“cls” указывает на аргумент принадлежащий классу
“self” указывает на аргумент который достанется экземпляру этого класса

если указать в классе В аргумент ‘х’ то cls.x = 3
если написать cls().что означает создать экземпляр то cls().x = 1

Я начинающий,поправьте,если не правильно понимаю

Офлайн

#5 Май 26, 2020 13:56:38

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Классы

xam1816
если указать в классе В аргумент ‘х’ то cls.x = 3
если написать cls().что означает создать экземпляр то cls().x = 1

Я начинающий,поправьте,если не правильно понимаю
да все правильно.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version