网站开发费税率是多少国内网页设计公司前十名
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:36
当前位置: 首页 > news >正文
网站开发费税率是多少,国内网页设计公司前十名,html5手机网站下载,甘肃省建设厅官方网站造价总站前言
在Python中#xff0c;类是一种用于创建新类型对象的结构#xff0c;它允许我们将数据和功能#xff08;属性和方法#xff09;封装到一个单独的逻辑单元中。类可以被看作是创建对象#xff08;实例#xff09;的蓝图或模板。类#xff08;Class#xff09;和对象…前言
在Python中类是一种用于创建新类型对象的结构它允许我们将数据和功能属性和方法封装到一个单独的逻辑单元中。类可以被看作是创建对象实例的蓝图或模板。类Class和对象Object是面向对象编程OOP的核心概念。
概念
类Class
类是一个用于创建对象的模板或蓝图。它定义了一组属性和方法这些属性和方法将被它创建的对象所共享。类本质上是一种数据结构它封装了数据以及操作这些数据的函数。
属性类中定义的变量。它们代表了该类所有对象共有的数据。方法类中定义的函数。它们用于描述该类所有对象共有行为或功能。
通过定义一个类你实际上是在定义一种新类型的数据结构这种结构包含了特定类型、对象所具有的属性、可以对这些属性执行哪些操作。
对象Object
对象是根据类被创建出来的实例。每个对象都拥有独立于其他对象的属性值集合但所有对象都共享同一个方法集合即那些在其对应类中被定义过。简单来说
每个实例或对象都拥有从相同模板或蓝图即class继承而来但独立存在、可以各自不同状态信息。实例化是根据类创建对象的过程
类与对象之间关系
类型与实例关系从概念上讲你可以把“class”看作“type”把由此“type”生成出来具体存在事物看作“instance”。例如“Dog”可以是一个表示所有狗通性特点模板名字而你家那条叫做Rex具体小狗则可视作根据Dog模板生成出来、带有自己特定状态信息如年龄、品种等信息记录项事物。共享与唯一性原则所有由同一个class生成出来instances会共享该class定义的代码逻辑项不随各自instance状态变化而变化同时每个instance也会拥有属于自己唯一且可能随时间改变状态信息记录项。继承性原则: 类之间可以通过继承机制分享通用代码逻辑项并允许子级别class在保持父级别已经提供功能基础上添加或修改部分以满足更加具体需求场景使用要求。
类定义
一个基本的类定义包括关键字class后面跟着类名和冒号。在其下方缩进的代码块中可以定义属性变量和方法函数。
要使用一个类你需要根据该类创建对象。每个对象都会有自己独立的属性集合。
class MyClass:def init(self, value): # 特殊方法init用于初始化对象构造器self.my_attribute valuedef my_method(self):return self.my_attribute * 2# 实例化对象
obj MyClass(99)
print(obj)
print(obj.my_method())
print(obj.my_attribute)# 直接修改对象的属性
obj.my_attribute 100print(obj)
print(obj.my_method())
print(obj.my_attribute)类的命名规范 驼峰命名法Python中的类名通常使用驼峰命名法CamelCase。这意味着类名中每个单词的首字母都大写而且单词之间不使用下划线分隔。例如MyClass、DataProcessor、CarEngine。 描述性命名类名应该简洁且富有描述性清楚地表明类的用途或功能。例如避免使用模糊的名称如Foo或Bar而应选择更具描述性的名称如Customer、EmailParser。 避免缩写尽量避免使用缩写因为缩写可能会使代码的可读性降低。完整的单词能更好地表达类的意图和功能。 首字母大写按照Python的约定类名的首字母应该大写即使它是一个缩写。例如URLParser而不是urlParser。 避免使用内置类型名称避免使用像str、list或dict这样的Python内置类型名称作为类名以免造成混淆。 命名长度虽然没有硬性的长度限制但一般推荐类名不要过长以保持代码的清晰和易于维护。
特殊方法
Python提供了多个特殊方法也称为魔术方法它们由双下划线包围。这些特殊方法提供了与Python语言功能集成的方式。
初始化和构造
init(self, […]): 对象初始化方法在创建新实例后被调用。new(cls, […]): 实际的对象构造函数是一个静态方法在init之前被调用。
class TestClassMethod:# 定义变量如果不赋值则必须指定类型# 但是类型注解 value_a: int 表示期望 value_a 是一个整数类型但它并不会阻止你将其他类型赋给该属性。value_a: intvalue_b value_b# 初始化方法def init(self, init_value: int): # 类型注解本身并不会强制变量类型在运行时仍然可以给带有类型注解的变量赋予任何类型的值。print(f初始化方法调用… init_value : {init_value})# 如果不指定 self. 则为局部变量无法在这里赋值# value_a init_valueself.value_a init_value# 实际的对象构造函数是一个静态方法在init之前被调用。# 在生产环境编写代码时通常不需要自己手动重写 new 方法除非你需要控制对象创建过程。对于大多数情况默认行为已经足够。staticmethod# 名为 new 的实例方法并非特殊方法。特殊方法 new 应当被定义为静态方法使用装饰器 staticmethod或者更常见地作为类方法使用装饰器 classmethod。def new(cls, *args, **kwargs):print(f对象构造函数调用… cls : {cls})return super(TestClassMethod, cls).new(cls)method TestClassMethod(1)print(method.value_a)
虽然类中定义了类型为int但是照常可以赋值字符串
method.value_a aa
print(method.value_a)print(method.value_b)print(dir(method))
表示和格式化
repr(self): 定义对象的“官方”字符串表示。str(self): 定义对象的“非正式”或可打印字符串表示。format(self, format_spec): 定义当使用format()函数时对象的格式。
repr(self)
目的创建一个代表对象的官方字符串表示形式。调用时机当你调用内置函数repr()时当没有定义str时在使用print函数打印对象或者在解释器中直接输入变量名查看对象时还有就是在调试过程中经常会看到这个表示。特点应该尽可能返回一个明确且不模糊的字符串表示形式最好能够通过这个字符串来重新创建该对象。因此通常返回值会看起来像是一个有效的Python表达式。
class Point:def init(self, x, y):self.x xself.y ydef repr(self):return fPoint({self.x}, {self.y})str(self)
目的创建一个对用户友好非技术用户的字符串表示形式。调用时机当你使用内置函数str()或者使用print函数打印一个对象时。特点返回值应该是可读性强、信息友好型描述。
class Point:def init(self, x, y):self.x xself.y ydef str(self):return fPoint located at ({self.x}, {self.y})区别
虽然两者都提供了关于对象信息展示方式但主要区别在于目标受众和它们各自所承担角色
repr: 面向开发者和调试器。其目标是明确无误地表达出如何构造出相同数据内容的新实例。str: 面向最终用户。其目标是提供友好易懂且便于阅读理解信息。
如果只实现了其中之一则未实现者将默认使用已实现者进行替代。如果都没有实现则会默认使用继承自object类中相应方法。
建议至少定义一个repr() 方法在大多数情况下它将足够用来输出有意义并可辨识资源信息并作为后备方案以防未定义 str().
运算符重载算术、比较运算符
add(self, other): 加法运算符。sub(self, other): 减法运算符-。mul(self, other): 乘法运算符*。truediv(self, other): 真除法运算符/.floordiv(self, other): 地板除法运算符//.mod(self, other): 取模余数操作 %.eq(self, other): 等于操作.ne(self, other): 不等于操作不等于操作.
class TestClassMethod:value 100def add(self, other):return self.value otherdef sub(self, other):return self.value - otherdef mul(self, other):return self.value * otherdef truediv(self, other):return self.value / otherdef floordiv(self, other):return self.value // otherdef mod(self, other):return self.value % otherdef eq(self, other):return self.value otherdef ne(self, other):return self.value ! other# 大于def gt(self, other):return self.value other# 大于等于def ge(self, other):return self.value other# 小于def lt(self, other):return self.value other# 小于等于def le(self, other):return self.value othermethod TestClassMethod()print(method 100)
print(method - 100)
print(method * 100)
print(method / 100)
print(method // 100)
print(method % 100)
print(method 100)
print(method ! 100)
print(method 100)
print(method 100)
print(method 100)
print(method 100)
属性访问
属性访问相关的特殊方法可以帮助我们自定义属性的获取、设置和删除行为
class TestClassMethod:def getattr(self, name):# 当尝试获取一个不存在的属性时调用print(f【报错】尝试获取不存在的属性: {name} )return 不存在的属性!def setattr(self, name, value):# 当对属性赋值时调用print(f调用赋值方法 {name} {value})# self.name value 不能这样赋值会导致递归调用super().setattr(name, value)def delattr(self, name):# 当删除一个属性时调用print(f调用删除属性的方法 {name} )super().delattr(name)method TestClassMethod()method.value 1
print(method.value)
print(method.value2)
del method.value
类属性
在Python中类的属性可以分为两种类属性和实例属性。
类属性
类属性访问 类属性可以通过类名直接访问。实例也可以访问类属性但是如果实例具有与类属性同名的实例属性则会优先访问实例属性。 修改类属性 通过类名修改类属性会影响到所有访问该属性的实例因为它们共享同一个类变量。如果通过实例修改看似“修改”了一个类变量即instance.attribute value其实是在该实例中创建了一个同名的实例变量并不会影响到其他实例或者是该变量在原来的那个class中。
类属性是属于类本身的变量它被所有该类的实例共享。这意味着如果你修改了一个类的类属性这个改变会影响到所有该类的实例。
class MyClass:class_attribute 0# 修改类属性将影响所有实例
MyClass.class_attribute 1instance1 MyClass()
instance2 MyClass()print(instance1.class_attribute) # 输出: 1
print(instance2.class_attribute) # 输出: 1
实例对象属性
实例属性是属于特定对象即某个具体实例的变量。每个对象都有自己独立的一套实例属性修改一个对象的实例属性不会影响其他对象。
对象属性访问 对象属性只能通过实例对象访问。它们是绑定到特定实例的因此每个实例都有自己独立的对象属性副本。 修改对象属性 对象属性的修改仅限于该特定实例。修改实例的属性不会影响到类的其他实例。如果尝试通过实例修改一个不存在的属性Python会自动在该实例上创建这个属性。
class MyClass:def init(self, value):self.instance_attribute value# 每个对象都有自己独立的 instance_attribute 属性。
instance1 MyClass(10)
instance2 MyClass(20)print(instance1.instance_attribute) # 输出: 10
print(instance2.instance_attribute) # 输出: 20# 修改一个对象的 instance_attribute 不会影响另一个。
instance1.instance_attribute 30print(instance1.instance_attribute) # 输出: 30
print(instance2.instance_attribute) # 输出: 20
属性引用和修改规则
类变量属于整个类所有基于此类创建出来的对象共享这个变量。如果需要对所有对象都生效地更改某个值请操作这个值所属类上定义好了的那个变量。对象属性是绑定到类的实例上的因此它们对于每个实例来说都是唯一的。修改一个实例的属性不会影响到其他实例。通过实例可以访问类属性但是如果实例有一个与类属性同名的对象属性则访问的是对象属性这体现了Python中的“名称遮蔽”特性。在Python中“名称遮蔽”Name Shadowing是指子作用域中的名称覆盖了外部作用域中相同名称的变量。这种特性在类属性与实例属性之间的交互中尤为常见。
class TestClassModifyAttr:attribute 0def init(self, value):self.attribute valuepropertydef test_method(self):当你尝试访问或者修改一个对象即某个具体实例上不存在但在其对应类型定义中存在作为property装饰器修饰过得方法时Python解释器将调用相应方法来处理此次访问或者修改行为。print(调用 test_method)a TestClassModifyAttr(999)print(a.attribute)
print(a.test_method)# 如果你尝试访问或者修改一个不存在于任何地方既不是该类型定义中也不是其基类型定义中
且未通过property装饰器修饰过得方法时
则解释器将调用 getattr() 或 setattr() 特殊方法来处理此次访问或者修改行为。
print(a.test_method2)
相关文章
-
网站开发费是无形资产吗徐州建设工程交易网柖标公告
网站开发费是无形资产吗徐州建设工程交易网柖标公告
- 技术栈
- 2026年03月21日
-
网站开发费是无形资产吗网站建设公司 壹起航
网站开发费是无形资产吗网站建设公司 壹起航
- 技术栈
- 2026年03月21日
-
网站开发费记什么会计科目我的世界怎么做购买点卷网站
网站开发费记什么会计科目我的世界怎么做购买点卷网站
- 技术栈
- 2026年03月21日
-
网站开发费用报价单剪映导出的视频字幕有乱码
网站开发费用报价单剪映导出的视频字幕有乱码
- 技术栈
- 2026年03月21日
-
网站开发费用是无形资产网站logo怎么做透明
网站开发费用是无形资产网站logo怎么做透明
- 技术栈
- 2026年03月21日
-
网站开发费用属无形资产吗网站建设与管理课程总结
网站开发费用属无形资产吗网站建设与管理课程总结
- 技术栈
- 2026年03月21日
