Передача переменных, создание экземпляров, 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
, когда использовать его, а когда нет. Я, вероятно, также не понял, как правильно создать экземпляр класса. В общем, я не понимал механику занятий, поэтому, пожалуйста, помогите мне и объясните мне это, как будто я понятия не имею (чего я не думаю). Или укажите мне подробное видео или читаемый учебник.
Все, что я нахожу в Интернете, - это супер простые примеры, которые мне не очень помогли. Или просто очень короткие определения экземпляров классов и классов и т.д.
Я могу отправить вам свой оригинальный код, если вы хотите, но его довольно долго.
Ответы
Ответ 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
.