做定制网站,h5制作软件会给源代码吗,做rom网站,网站模板平台目录 1、Object类
2、初始化方法
3、双下划线方法
4、传递参数
5、装饰器
6、assert
7、yield关键字 1、Object类
class NodeBase(object):
在Python中#xff0c;Object是所有其他类的基类。换句话说#xff0c;所有的类都是Object类的子类。Object类定义了所有对象…目录 1、Object类
2、初始化方法
3、双下划线方法
4、传递参数
5、装饰器
6、assert
7、yield关键字 1、Object类
class NodeBase(object):
在Python中Object是所有其他类的基类。换句话说所有的类都是Object类的子类。Object类定义了所有对象的基本行为和属性。Object类定义了以下的一些方法init: 这是一个特殊的方法在创建新对象时自动调用。它是用来初始化新创建的对象的状态的。del: 这是一个特殊的方法当一个对象被垃圾收集器回收时自动调用。它通常用于清理资源如关闭文件或网络连接。str 和 repr: 这两个方法都用于返回对象的字符串表示。它们的主要区别在于如果可能str()应该返回一个人类可读的字符串而repr()应该返回一个可以用来复现该对象的字符串。eq 和 ne: 这两个方法用于比较两个对象是否相等。它们的行为由类的实现决定。lt le gt ge: 这些方法用于比较两个对象。它们的行为由类的实现决定。call: 这是一个特殊的方法可以在对象上调用。它通常用于模拟函数调用。hash: 这个方法返回一个整数该整数可以被用作哈希值。它通常由不可变类型如整数、浮点数、字符串和元组的实现覆写。bool: 这个方法返回一个布尔值该值表示对象是否被视为真值。它通常由有意义的值如非零的数字或非空的字符串或列表的实现覆写。
2、初始化方法
def __init__(self,*coord):self.init_coord(*coord)self._ID Noneself._nAk Noneself._nBk Noneself.init_keys()
def __init__(self,*coord): 这是类的初始化方法当你创建这个类的一个实例时这个方法会被调用。self 是对实例自身的引用*coord 是一个可变参数可以接收任意数量的参数。self.init_coord(*coord): 这行代码调用了一个名为 init_coord 的方法并将 *coord 参数传递给它。这可能是用来初始化坐标或其他相关数据的。self._ID None: 这行代码为实例的 _ID 属性赋值为 None。这是一个私有属性以单下划线前缀表示。self._nAk None 和 self._nBk None: 这两行代码分别为实例的 _nAk 和 _nBk 属性赋值为 None。这两个也是私有属性。self.init_keys(): 这行代码调用了一个名为 init_keys 的方法可能是用来初始化键或相关数据的。
在Python中*coord 和 **coord 都是在函数参数中使用的表示对参数进行解包。 *coord 是用于解包列表或元组。当你传递一个列表或元组给一个函数并且使用 * 前缀Python会把这个列表或元组解包为单独的参数。例如
def sum_numbers(*coord): return sum(coord) numbers [1, 2, 3, 4, 5]
result sum_numbers(*numbers) # 这等价于 sum_numbers(1, 2, 3, 4, 5)
print(result) # 输出15 **coord 是用于解包字典。当你传递一个字典给一个函数并且使用 ** 前缀Python会把这个字典解包为单独的关键字参数。例如
def print_dict(**coord): print(coord) my_dict {name: Alice, age: 25}
print_dict(**my_dict) # 这等价于 print_dict(nameAlice, age25)
3、双下划线方法 def __repr__(self):return Node:%r%(self.coord,)def __getitem__(self,key):return self.coord[key]
在Python中双下划线开头的函数如__repr__被称为特殊方法或双下划线方法。这些方法在Python中具有特殊的意义和用途。__repr__方法就是其中之一。
__repr__是一个内置方法用于返回一个对象的字符串表示。这个方法的目的是让对象可以被准确地、无歧义地重新创建。通常__repr__应该返回一个字符串这个字符串包含了一个可以用来复制对象的Python表达式。
例如如果你有一个名为Person的类它有一些属性如name和age你可以这样定义__repr__方法
class Person: def __init__(self, name, age): self.name name self.age age def __repr__(self): return fPerson({self.name}, {self.age})
person Person(Alice, 25)
print(person) # 输出Person(Alice, 25)4、传递参数
def init_coord(self,*coord):self._x 0.self._y 0.self._z 0.if len(coord) 1:self.dim len(coord[0])if self.dim 2:self._x coord[0][0]*1.self._y coord[0][1]*1.self.coord (self.x,self.y)elif self.dim 3:self._x coord[0][0]*1.self._y coord[0][1]*1.self._z coord[0][2]*1.self.coord (self.x,self.y,self.z)else:raise AttributeError(Node dimension is 2 or 3)elif len(coord) 2:self.coord tuple(coord)self.dim 2self._x coord[0]*1.self._y coord[1]*1.self.coord (self.x,self.y)elif len(coord) 3:self.coord tuple(coord)self.dim 3self._x coord[0]*1.self._y coord[1]*1.self._z coord[2]*1.self.coord (self.x,self.y,self.z)else:raise AttributeError(Node dimension is 2 or 3)这段代码是定义了一个对象的三个私有属性_x, _y, _z并设置了对象的一个公有属性coord。方法接收一个或多个参数并根据参数的数量和类型设置属性的值可以是列表list、元组tuple或numpy.ndarray类型。
5、装饰器
propertydef nBk(self):return self._nBk
property这是一个装饰器的语法用于将下面的方法标记为一个属性。这意味着该方法可以在类实例上使用点表示法即obj.nBk来访问。def nBk(self):这是一个名为nBk的方法它是一个属性的定义。该方法没有参数并且返回一个值这个值是通过return self._nBk得到的。return self._nBk这个语句返回self._nBk的值。在这里self._nBk应该是该类的一个实例属性即在实例创建时赋值的属性它存储了真正的值。由于nBk方法是一个只读属性所以它没有参数并且不接受任何输入参数。 x.setterdef x(self,val):self._x valx.setter这是一个装饰器语法用于定义一个名为x的setter方法。setter方法是用于设置对象属性的方法。在Python中setter方法通常用于当您想要在更改属性的值时执行一些额外的操作例如验证或记录日志。def x(self, val):这是定义的setter方法。它的名称是“x”它是一个实例方法因为它以self为第一个参数并且它接受一个额外的参数val这是我们要设置的新值。self._x val这行代码是将新的值赋给属性_x。在Python中通常使用下划线前缀来表示一个变量的名称是私有的这意味着它应该在类的外部被隐藏并且只能通过类内部的方法来访问。在这里我们假设_x是这个类的私有属性所以我们使用下划线前缀。
class Person: def __init__(self, ID): self._ID ID ID.setter def ID(self, val): self._ID val
p Person(123)
p.ID 456 # 这里调用了setter方法将_ID属性的值更改为456
print(p._ID) # 输出456
6、assert
assert boolean_expression
assert boolean_expression, message
assert issubclass(type(nd),NodeBase),Must be Node type
这段代码是在一个类的初始化方法__init__中使用了一个断言语句assert。断言语句用于在运行时检查代码的正确性如果条件不满足则会引发一个异常。
在这段代码中assert issubclass(type(nd),NodeBase),Must be Node type这行代码的含义是检查变量nd是否是NodeBase类或其子类的实例。如果不是它将引发一个异常异常信息为Must be Node type。
具体来说type(nd)会返回变量nd的类型issubclass(type(nd),NodeBase)会检查返回的类型是否是NodeBase类或其子类。如果是返回True否则返回False。如果issubclass返回False即nd不是NodeBase类或其子类的实例那么assert语句就会引发一个异常异常信息为Must be Node type。
这种断言方式常常用于确保程序的正确性避免程序在运行时出现不可预期的行为。
def zeros(s):aint(s)assert a0,out rangereturn a
print(zeros(-1))7、yield关键字
yield在函数中的功能类似于return不同的是yield每次返回结果之后函数并没有退出而是 每次遇到yield关键字后返回相应结果并保留函数当前的运行状态等待下一次的调用。如果 一个函数需要多次循环执行一个动作并且每次执行的结果都是需要的这种场景很适合使用yield实现。
包含yield的函数成为一个生成器生成器同时也是一个迭代器支持通过next方法获取下一个值。
使用yield的好处是通过使用生成器避免占用内存提高运行效率。
def pair_wise(L,end False):pool tuple(L)n len(pool)assert n 2,Length of iterable must greater than 3 if end is True:indices list(range(n))for i in indices:if i n -1:yield (pool[i],pool[i1])else:yield (pool[i],pool[0])if end is False:indices list(range(n-1))for i in indices:yield (pool[i],pool[i1])
a[1,2,3,4]
for i in pair_wise(a,True):print(i)(1, 2)
(2, 3)
(3, 4)
(4, 1)