我无法理解在哪些方法中包含哪些参数
I am have trouble understanding which parameters to include in which methods
我正在阅读有关 类 的一章,但我无法理解哪些参数应该包含在哪些方法中。例如在这段代码中:
class Employee:
'''A simple class to describe an employee.'''
def __init__(self, first_name, last_name, salary, sal_raise=5000):
'''Initialize first name, last name, salary, and maybe raise?'''
self.first_name = first_name
self.last_name = last_name
self.salary = salary
self.sal_raise = sal_raise
def give_raise(self):
self.salary += self.sal_raise
print(f'''You've given {self.first_name} a ${self.sal_raise} raise!''')
sal_raise
目前是 __init__()
方法中的一个参数。这是唯一的方法吗?难道不能在 give_raise 方法中初始化 sal_raise 吗?像这样:
def give_raise(self):
self.sal_raise = 5000
self.salary += self.sal_raise
在这种情况下,每次加薪的金额很可能会有所不同。所以你不想在初始化时设置一次或将它作为一个不变的值。
相反,您可以将加注作为 give_raise
:
的参数
class Employee:
def __init__(self, first_name, last_name, salary):
self.first_name = first_name
self.last_name = last_name
self.salary = salary
def give_raise(self, sal_raise):
self.salary += sal_raise
print(f'''You've given {self.first_name} a £{sal_raise} raise!''')
print(f'''{self.first_name}'s salary is now £{self.salary}!''')
robson = Employee("Robson", "Moon", 100000)
robson.give_raise(5000)
robson.give_raise(2000)
那将输出:
You've given Robson a £5000 raise!
Robson's salary is now £105000
You've given Robson a £2000 raise!
Robson's salary is now £107000
你知道 __init__()
方法和 class 中定义的其他方法有什么区别吗?没有什么 !唯一的区别是 __init__()
在实例化 class 时“自动”被调用。
有什么好处?您没有 __init__()
的图像,为了为您的实例设置一些初始值,您必须显式调用一个方法:
class Person:
def initialize_my_class(self, name):
self.name = name
self.age = 10
self.height = 100
p1 = Person()
print(p1.name) # AttributeError: 'Person' object has no attribute 'name'
print(p1.age) # AttributeError: 'Person' object has no attribute 'age'
print(p1.height) # AttributeError: 'Person' object has no attribute 'height'
为什么?因为 python 不会自动 运行 我的 initialize_my_class
方法。如果我想让它工作,我必须自己调用它:
class Person:
def initialize_my_class(self, name):
self.name = name
self.age = 10
self.height = 100
p1 = Person()
p1.initialize_my_class('Soroush') # <---------- Here
print(p1.name)
print(p1.age)
print(p1.height)
__init__()
会自动执行此操作。想象一下,您的 class 中有数十个方法,如果没有 __init__()
,您必须一个接一个地调用它们……但是我们只是在 __init__()
中执行我们想要的所有初始化操作.
现在你的 sal_raise
:通常,如果这是你在初始化部分需要的东西,请在 __init__()
中定义它。 但是有时我们希望我们的实例具有我们想要的“任何时候”的属性!不在初始化阶段。为什么?
有时我们必须计算一些足够重或耗时的东西(不仅仅是存储一个数字),我们在一个单独的方法中将该属性设置到我们的实例,并在必要时调用它!也许当程序达到某个条件时。因此,只需让 __init__
包括我们在实例化阶段所需的其他初始化:
class Person:
def __init__(self, name):
self.name = name
self.age = 10
self.height = 100
def time_consuming_method(self):
# This 'foo' is the result of heavy calculation here
self.new_var = 'foo'
p1 = Person('soroush')
# special condition is true...
# Now it's time to call 'time_consuming_method':
p1.time_consuming_method()
希望这是有道理的。
我正在阅读有关 类 的一章,但我无法理解哪些参数应该包含在哪些方法中。例如在这段代码中:
class Employee:
'''A simple class to describe an employee.'''
def __init__(self, first_name, last_name, salary, sal_raise=5000):
'''Initialize first name, last name, salary, and maybe raise?'''
self.first_name = first_name
self.last_name = last_name
self.salary = salary
self.sal_raise = sal_raise
def give_raise(self):
self.salary += self.sal_raise
print(f'''You've given {self.first_name} a ${self.sal_raise} raise!''')
sal_raise
目前是 __init__()
方法中的一个参数。这是唯一的方法吗?难道不能在 give_raise 方法中初始化 sal_raise 吗?像这样:
def give_raise(self):
self.sal_raise = 5000
self.salary += self.sal_raise
在这种情况下,每次加薪的金额很可能会有所不同。所以你不想在初始化时设置一次或将它作为一个不变的值。
相反,您可以将加注作为 give_raise
:
class Employee:
def __init__(self, first_name, last_name, salary):
self.first_name = first_name
self.last_name = last_name
self.salary = salary
def give_raise(self, sal_raise):
self.salary += sal_raise
print(f'''You've given {self.first_name} a £{sal_raise} raise!''')
print(f'''{self.first_name}'s salary is now £{self.salary}!''')
robson = Employee("Robson", "Moon", 100000)
robson.give_raise(5000)
robson.give_raise(2000)
那将输出:
You've given Robson a £5000 raise!
Robson's salary is now £105000
You've given Robson a £2000 raise!
Robson's salary is now £107000
你知道 __init__()
方法和 class 中定义的其他方法有什么区别吗?没有什么 !唯一的区别是 __init__()
在实例化 class 时“自动”被调用。
有什么好处?您没有 __init__()
的图像,为了为您的实例设置一些初始值,您必须显式调用一个方法:
class Person:
def initialize_my_class(self, name):
self.name = name
self.age = 10
self.height = 100
p1 = Person()
print(p1.name) # AttributeError: 'Person' object has no attribute 'name'
print(p1.age) # AttributeError: 'Person' object has no attribute 'age'
print(p1.height) # AttributeError: 'Person' object has no attribute 'height'
为什么?因为 python 不会自动 运行 我的 initialize_my_class
方法。如果我想让它工作,我必须自己调用它:
class Person:
def initialize_my_class(self, name):
self.name = name
self.age = 10
self.height = 100
p1 = Person()
p1.initialize_my_class('Soroush') # <---------- Here
print(p1.name)
print(p1.age)
print(p1.height)
__init__()
会自动执行此操作。想象一下,您的 class 中有数十个方法,如果没有 __init__()
,您必须一个接一个地调用它们……但是我们只是在 __init__()
中执行我们想要的所有初始化操作.
现在你的 sal_raise
:通常,如果这是你在初始化部分需要的东西,请在 __init__()
中定义它。 但是有时我们希望我们的实例具有我们想要的“任何时候”的属性!不在初始化阶段。为什么?
有时我们必须计算一些足够重或耗时的东西(不仅仅是存储一个数字),我们在一个单独的方法中将该属性设置到我们的实例,并在必要时调用它!也许当程序达到某个条件时。因此,只需让 __init__
包括我们在实例化阶段所需的其他初始化:
class Person:
def __init__(self, name):
self.name = name
self.age = 10
self.height = 100
def time_consuming_method(self):
# This 'foo' is the result of heavy calculation here
self.new_var = 'foo'
p1 = Person('soroush')
# special condition is true...
# Now it's time to call 'time_consuming_method':
p1.time_consuming_method()
希望这是有道理的。