Найти - Пользователи
Полная версия: Классы
Начало » Python для новичков » Классы
1 2 3 4
PEHDOM
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
>>>
думаю принцип понятен?
FishHook
Kasta_neda
Ваш код аналогичен вот этому.

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

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

Спасибо всем за помощь!
xam1816
 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

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

Я начинающий,поправьте,если не правильно понимаю
да все правильно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB