Baf*_*Baf 41 python class instance-variables call parameter-passing
我一整天都坐在这里,我已经有点累了所以请原谅我简短.
我是python的新手.
我只是将一个工作程序重写成一个类中的一堆函数,一切都搞砸了.我不知道是不是我,但我很惊讶我找不到关于如何在网上处理课程的初学者教程,所以我有几个问题.
首先,在__init__类的部分我已经声明了一堆变量self.variable=something.
通过self.variable在该函数中使用,我应该能够在类的每个函数中访问/修改这些变量是否正确?换句话说,通过声明self.variable我已经制作了这些变量,类的范围内的全局变量对吗?
如果没有,我该如何处理自我?
其次,如何正确地将参数传递给类?一些示例代码很酷.
第三,如何在类范围之外调用类的函数?一些示例代码很酷.
第四,如何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()
Run Code Online (Sandbox Code Playgroud)
我显然不明白如何将变量传递给类或如何处理self,何时使用它以及何时不使用.我可能也不明白如何正确创建类的实例.一般来说,我不了解课程的机制,所以请帮助我并向我解释,就像我不知道(我似乎没有,似乎).或者指向一个完整的视频或可读的教程.
我在网上找到的只是一些非常简单的例子,对我没什么帮助.或者只是非常简短的类和类方法实例的定义等.
如果你们想要的话,我可以寄给你原始代码,但它很长.
mgi*_*son 81
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
Run Code Online (Sandbox Code Playgroud)
Max*_*ers 27
所以这里有一个如何使用类的简单示例:假设您是一家金融机构.您希望客户的帐户由计算机管理.所以你需要为这些帐户建模.这就是类的用武之地.使用类称为面向对象编程.使用类可以在计算机中为现实世界对象建模.那么,我们需要为简单的银行账户建模什么呢?我们需要一个保存余额的变量和一个保存客户名称的变量.此外,还有一些方法可以减少平衡.这可能看起来像:
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
Run Code Online (Sandbox Code Playgroud)
现在您有一个简单帐户的抽象模型及其机制.这def __init__(self, name, money)是类的构造函数.它在内存中构建对象.如果您现在想要开设一个新帐户,则必须创建一个班级实例.为此,您必须调用构造函数并传递所需的参数.在Python中,构造函数由类的名称调用:
spidermans_account = bankaccount("SpiderMan", 1000)
Run Code Online (Sandbox Code Playgroud)
如果蜘蛛侠希望购买MJ新戒指,他必须提取一些钱.他会withdraw在他的账户上调用该方法:
spidermans_account.withdraw_money(100)
Run Code Online (Sandbox Code Playgroud)
如果他想看到他所说的余额:
spidermans_account.show_balance()
Run Code Online (Sandbox Code Playgroud)
关于类的全部内容是对对象,它们的属性和机制进行建模.要创建对象,请在示例中实例化它.使用getter和setter方法(如`earn_money()')将值传递给类.这些方法访问您的对象变量.如果希望类存储另一个对象,则必须在构造函数中为该对象定义变量.
类的全部意义在于您创建一个实例,并且该实例封装了一组数据。所以说你的变量在类的范围内是全局的是错误的:而是说一个实例拥有属性,并且该实例可以在它的任何代码中引用它自己的属性(通过self.whatever)。类似地,给定实例的任何其他代码都可以使用该实例来访问该实例的属性 - 即instance.whatever.