Подтвердить что ты не робот

Передача переменных, создание экземпляров, self, Механика и использование классов: требуется объяснение

Я сижу над этим весь день, и я немного устал, поэтому, пожалуйста, извините, что я был кратким.

Im новый для python.

Я только что переписал рабочую программу, кучу функций в классе и все испортило. Я не знаю, не так ли это, но я очень удивлен, что не смог найти учебник для начинающих о том, как обрабатывать классы в Интернете, поэтому у меня есть несколько вопросов.

Первый из всех, в разделе __init__ класса я объявил кучу переменных с self.variable=something.

Правильно ли, что я должен иметь возможность доступа/изменения этих переменных в каждой функции класса с помощью self.variable в этой функции? Другими словами, объявив self.variable, я сделал эти переменные глобальными переменными в области действия класса?

Если нет, как я могу справиться самостоятельно?

Во-вторых,, как правильно передать аргументы классу? Некоторый пример кода был бы классным.

В-третьих, как я могу вызвать функцию класса вне класса? Некоторый пример кода был бы классным.

Fouthly, как создать экземпляр class INITIALCLASS в другом class OTHERCLASS, передав переменные от OTHERCLASS до INITIALCLASS? Некоторый пример кода был бы классным.

Я хочу вызвать функцию из OTHERCLASS с аргументами из INITIALCLASS. Что я сделал до сих пор.

class OTHERCLASS():
    def __init__(self,variable1,variable2,variable3):
        self.variable1=variable1
        self.variable2=variable2
        self.variable3=variable3
    def someotherfunction(self):
        something=somecode(using self.variable3)
        self.variable2.append(something)
        print self.variable2
    def somemorefunctions(self):
        self.variable2.append(variable1)

class INITIALCLASS():
    def __init__(self):
        self.variable1=value1
        self.variable2=[]
        self.variable3=''
        self.DoIt=OTHERCLASS(variable1,variable2,variable3)

    def somefunction(self):
        variable3=Somecode
        #tried this
        self.DoIt.someotherfunctions()
        #and this
        DoIt.someotherfunctions()

Я явно не понимал, как передавать переменные классам или как обращаться с self, когда использовать его, а когда нет. Я, вероятно, также не понял, как правильно создать экземпляр класса. В общем, я не понимал механику занятий, поэтому, пожалуйста, помогите мне и объясните мне это, как будто я понятия не имею (чего я не думаю). Или укажите мне подробное видео или читаемый учебник.

Все, что я нахожу в Интернете, - это супер простые примеры, которые мне не очень помогли. Или просто очень короткие определения экземпляров классов и классов и т.д.

Я могу отправить вам свой оригинальный код, если вы хотите, но его довольно долго.

4b9b3361

Ответ 1

class Foo          (object):
    # ^class name  #^ inherits from object

    bar = "Bar" #Class attribute.

    def __init__(self):
        #        #^ The first variable is the class instance in methods.  
        #        #  This is called "self" by convention, but could be any name you want.
        #^ double underscore (dunder) methods are usually special.  This one 
        #  gets called immediately after a new instance is created.

        self.variable = "Foo" #instance attribute.
        print self.variable, self.bar  #<---self.bar references class attribute
        self.bar = " Bar is now Baz"   #<---self.bar is now an instance attribute
        print self.variable, self.bar  

    def method(self, arg1, arg2):
        #This method has arguments.  You would call it like this:  instance.method(1, 2)
        print "in method (args):", arg1, arg2
        print "in method (attributes):", self.variable, self.bar


a = Foo() # this calls __init__ (indirectly), output:
                 # Foo bar
                 # Foo  Bar is now Baz
print a.variable # Foo
a.variable = "bar"
a.method(1, 2) # output:
               # in method (args): 1 2
               # in method (attributes): bar  Bar is now Baz
Foo.method(a, 1, 2) #<--- Same as a.method(1, 2).  This makes it a little more explicit what the argument "self" actually is.

class Bar(object):
    def __init__(self, arg):
        self.arg = arg
        self.Foo = Foo()

b = Bar(a)
b.arg.variable = "something"
print a.variable # something
print b.Foo.variable # Foo

Ответ 2

Итак, вот простой пример использования классов: Предположим, вы являетесь финансовым институтом. Вы хотите, чтобы ваши учетные записи клиентов управлялись компьютером. Поэтому вам нужно смоделировать эти учетные записи. Именно там появляются классы. Работа с классами называется объектно-ориентированным программированием. С помощью классов вы моделируете объекты реального мира на своем компьютере. Итак, что нам нужно для моделирования простого банковского счета? Нам нужна переменная, которая сохраняет баланс и сохраняет имя клиента. Кроме того, некоторые методы для уменьшения и уменьшения баланса. Это может выглядеть так:

class bankaccount():
    def __init__(self, name, money):
        self.name = name
        self.money = money

    def earn_money(self, amount):
        self.money += amount

    def withdraw_money(self, amount):
        self.money -= amount

    def show_balance(self):
        print self.money

Теперь у вас есть абстрактная модель простой учетной записи и ее механизма. def __init__(self, name, money) - это конструктор классов. Он создает объект в памяти. Если теперь вы хотите открыть новую учетную запись, вам нужно сделать экземпляр вашего класса. Для этого вам нужно вызвать конструктор и передать необходимые параметры. В Python конструктор вызывается именем классов:

spidermans_account = bankaccount("SpiderMan", 1000)

Если Человек-паук хочет купить M.J. новое кольцо, он должен снять деньги. Он назовет метод withdraw в своем аккаунте:

spidermans_account.withdraw_money(100)

Если он хочет увидеть баланс, который он называет:

spidermans_account.show_balance()

Все о классах - это моделирование объектов, их атрибутов и механизмов. Чтобы создать объект, создайте его как в примере. Значения передаются классам с методами getter и setter, такими как `earn_money() '. Эти методы получают доступ к вашим переменным объектов. Если вы хотите, чтобы ваш класс сохранил другой объект, вам нужно определить переменную для этого объекта в конструкторе.

Ответ 3

Вся суть класса заключается в том, что вы создаете экземпляр, и этот экземпляр инкапсулирует набор данных. Поэтому неправильно говорить, что ваши переменные глобальны в рамках класса: скажем, что экземпляр содержит атрибуты, и этот экземпляр может ссылаться на свои собственные атрибуты в любом из его кода (через self.whatever). Аналогично, любой другой код, заданный экземпляром, может использовать этот экземпляр для доступа к атрибутам экземпляра, т.е. instance.whatever.