为什么我们在从 Python 中的 class 创建对象时不必定义参数的类型?
Why we don't have to define the type of an argument when creating an object from a class in Python?
我是 Python 的新手,我刚刚创建了一个 class 作为我正在学习的在线课程的一部分。
from math import sqrt
class Line:
def __init__(self,coor1,coor2):
self.coor1=coor1 #tuple (x1,y1)
self.coor2=coor2 #tuple (x2,y2)
def distance(self):
return sqrt((self.coor2[0]-self.coor1[0])**2+(self.coor2[1]-self.coor1[1])**2)
def slope(self):
return (self.coor2[1]-self.coor1[1])/(self.coor2[0]-self.coor1[0])
这是 Line
的 class,可以帮助我找到两个坐标之间的距离。我想知道,既然一个坐标需要是一个元组,那么 Python 是怎么知道的呢?为什么我不需要在 def __init__
?
中定义它
不是python谁知道那是一个元组!如果你想让 python 假定 coor1
和 coor2
是元组,你应该处理它。现在,如果您创建 class 的对象,例如:
line1 = Line("hi","Sorath")
coor1
等于 hi
而 coor2
等于 Sorath
并且它们都是字符串。
coor1
和 coor2
可以是任何东西,你应该在传递值或写 __init__
!
时定义它们的类型
def __init__(self,coor1,coor2):
if type(coor1)==tuple:
self.coor1=coor1 #tuple (x1,y1)
else:
self.coor1 = () #empty tuple
if type(coor2)==tuple:
self.coor2=coor2 #tuple (x2,y2)
else:
self.coor2 = () #empty tuple
__init__() 只是 class 的构造函数。创建新对象时会调用此方法。
def __init__(self, coor1, coor2):
表示您希望两个参数(即 coor1 和 coor2)创建对象。例如,当你创建一个对象时,你可以这样做:
coor1 = (2, 6) # a tuple
coor2 = (-4, 12) # a tuple
l = Line(coor1, coor2) # create an object Line
Python is interpreted language and dynamically typed. So the types of variables are inferred by the interpreter.
要知道变量的类型,可以使用函数type(object)
。例如
type(coor1)
<class 'tuple'>
下面应该可以很好地解释原因:
https://wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language
TLDR:开发人员有责任确保您使用的数据类型适合该功能。由于 Python 是动态类型的,因此 "know" 赋值时的数据类型是什么。
Python 3.5+ 虽然引入了变量数据类型的声明(即类型提示):
def __init__(self, coord1: tuple, coord2: tuple):
# initialize
我是 Python 的新手,我刚刚创建了一个 class 作为我正在学习的在线课程的一部分。
from math import sqrt
class Line:
def __init__(self,coor1,coor2):
self.coor1=coor1 #tuple (x1,y1)
self.coor2=coor2 #tuple (x2,y2)
def distance(self):
return sqrt((self.coor2[0]-self.coor1[0])**2+(self.coor2[1]-self.coor1[1])**2)
def slope(self):
return (self.coor2[1]-self.coor1[1])/(self.coor2[0]-self.coor1[0])
这是 Line
的 class,可以帮助我找到两个坐标之间的距离。我想知道,既然一个坐标需要是一个元组,那么 Python 是怎么知道的呢?为什么我不需要在 def __init__
?
不是python谁知道那是一个元组!如果你想让 python 假定 coor1
和 coor2
是元组,你应该处理它。现在,如果您创建 class 的对象,例如:
line1 = Line("hi","Sorath")
coor1
等于 hi
而 coor2
等于 Sorath
并且它们都是字符串。
coor1
和 coor2
可以是任何东西,你应该在传递值或写 __init__
!
def __init__(self,coor1,coor2):
if type(coor1)==tuple:
self.coor1=coor1 #tuple (x1,y1)
else:
self.coor1 = () #empty tuple
if type(coor2)==tuple:
self.coor2=coor2 #tuple (x2,y2)
else:
self.coor2 = () #empty tuple
__init__() 只是 class 的构造函数。创建新对象时会调用此方法。
def __init__(self, coor1, coor2):
表示您希望两个参数(即 coor1 和 coor2)创建对象。例如,当你创建一个对象时,你可以这样做:
coor1 = (2, 6) # a tuple
coor2 = (-4, 12) # a tuple
l = Line(coor1, coor2) # create an object Line
Python is interpreted language and dynamically typed. So the types of variables are inferred by the interpreter.
要知道变量的类型,可以使用函数type(object)
。例如
type(coor1)
<class 'tuple'>
下面应该可以很好地解释原因: https://wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language
TLDR:开发人员有责任确保您使用的数据类型适合该功能。由于 Python 是动态类型的,因此 "know" 赋值时的数据类型是什么。
Python 3.5+ 虽然引入了变量数据类型的声明(即类型提示):
def __init__(self, coord1: tuple, coord2: tuple):
# initialize