验证python是动态语言,并且为类添加属性。

定义

静态语言:静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,不允许再运行过程中修改代码。
例如:C++、Java、Delphi、C#等

动态语言:动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
例如:PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。

特点

强类型定义语言

强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
弱类型定义语言

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
两者区别
特性

强类型语言是一旦变量的类型被确定,就不能转化的语言。
弱类型语言则反之,一个变量的类型是由其应用上下文确定的。

静态语言的优势

由于类型的强制声明,使得IDE有很强的代码感知能力,故,在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障;
由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低

动态语言的优势

    思维不受束缚,可以任意发挥,把更多的精力放在产品本身上;
    集中思考业务逻辑实现,思考过程即实现过程;

code:实例

a =100
def test():
	print("---test")
a = test()
a()
#此时的函数test被赋值给了a,而a原来保存的是一个整型数字,之后被赋值给了函数,a的类型变了
	
class test(object):
	pass
t =test()
dir(t)
#此时t应该继承了test类的所有属性,dir(t)可以将t这个实例的所有属性打印出来,之后试着为t添加属性
t.age =188888
#为t添加了一个age属性,之后再dir(t)就可以显示出来t的所有属性,此时可以看见t的属性包含了一个age,这是原来的object类里面所没有的
为类动态添加属性
class Persong(object):
	def __init__ (self,newName,newAge):
		self.name =newName
		self.age =newAge
laowang =Person('老王来了'1000)
print(laowang.name)
print(laowang.age)
#此时尝试实例的别的属性
print(laowang.addr)
#编译器会报错,因为再初始化类的时候没有写入实例的addr属性
laowang.addr ='北京'
print(laowang.addr)


laozhao =Person('老赵',1000)
print(laozhao.addr)
#此时会报错,因为上面只是操作的一个实例,并没有对类的结构调整

给类添加属性

class Persong(object):
	def __init__ (self,newName,newAge):
		self.name =newName
		self.age =newAge
laowang =Person('老王来了'1000)
print(laowang.name)
print(laowang.age)
laowang.addr ='北京'
print(laowang.addr)
laozhao =Person('老赵',1000)
Person.num =100
#此时为类添加了一个属性
print(laowang.num)
print(laozhao.num)

添加方法

class Person(object):
	def __init__(self,newName,newAge):
		self.name=newName
		self.age =newAge
	def eat(self):
		print('%s正在吃'%self.name)
#在函数外添加一个方法,先定义一个方法

def run(self):
	print('---%sz正在跑---'%self.name)
p1 =Person('p1',10)
p1.eat()

#想为一个类添加一个方法run,如下为尝试
#错误的方法
p1.run =run
p1.run()
#虽然p1对象中,run属性已经指向了函数run但是没能传入self这个变量,这句代码还不对,因为run属性指向的函数,是后来添加的,p1.run()的时候,没有把p1当作第一个参数,导致了,后面函数调用的时候,出现了参数缺少的问题
#即此时p1已经有了自己的内存空间,而且这里没有之前类添加的属性,所以p1内部没有run属性。

正确方法:

import types
class Person(object):
	def __init__(self,newName,newAge):
		self.name=newName
		self.age =newAge
	def eat(self):
		print('%s正在吃'%self.name)

def run(self):
	print('---%sz正在跑---'%self.name)
def eat(self):
	print('---%s正在吃---')
	
p1.run =types.MethodType(run,p1)
p1.eat =types.MethodType(eat,p1)
p1.run()
p1.eat()

在这里插入图片描述上图是types的help,可以看见使用types的方法是types.MethodType(function,instance),function就是需要添加的属性,instance就是被绑定的实例
在这里插入图片描述在这里插入图片描述这么写是为了将types函数的返回值保存,实际上是已经将方法添加到了,实例里面,此时通过什么保存都是可以的,但是写p1.eat是为了统一,方便理解,并不是必须写p1.eat
注意:只有动态方法是和实例绑定静态方法和类方法绑定的是类!!!!!

静态方法(绑定的是类)

我觉得静态方法就是不能接受返回值的方法,就像动态方法里面的self,就是为了接收返回值,而静态方法不管绑定在哪个类上,都没有返回值。PS:欢迎指正

@staticmethod
#类似于装饰器
def test():
	print('----static methon--')
p.test =test
p.test()

类方法

@classmethod
def printNum(cls):
	print('----class methon---')
p.printNum =printNum
p.printNum()

如代码所示就是使用方法,简单易懂QAQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到的《Python 入门到人工智能实战》是一本针对零基础编程学习者编写的教程,它从初学者的角度出发,以问题为导向,通过大量的实例详细介绍了Python的基础知识、机器学习以及PyTorch和Keras这两个平台。这本书共有20章,包括Python的安装配置、语言基础、流程控制语句、序列、函数、对象、文件及异常处理、数据处理和分析的重要模块(NumPy、Pandas)、机器学习基础、机器学习常用调优方法、神经网络、卷积神经网络,以及使用PyTorch和Keras实现多个人工智能实战案例等。书中的知识都结合具体实例进行讲解,并给出了详细的注释,使读者可以轻松理解。\[1\] 在引用\[2\]中提到了Python 2.7和Python 3.5之间的一些差异。在Python 2.7中,一个32位整数消耗24字节的内存,而在Python 3.5中则消耗28字节的内存。可以使用sys.getsizeof()方法来验证内存使用情况。\[2\] 关于Python的使用技巧,以下是一些常用的技巧: 1. 使用面向对象编程的思想,将相关的数据和方法封装在一个中,提高代码的可读性和可维护性。 2. 使用__init__()方法来初始化的实例,并设置实例的属性。 3. 使用self关键字来引用的实例,可以在的方法中访问实例的属性和调用其他方法。 4. 使用@property装饰器来定义属性的getter和setter方法,可以在访问属性时进行额外的逻辑处理。 5. 使用继承来创建子,可以继承父属性和方法,并可以在子添加新的属性和方法。 6. 使用super()函数来调用父的方法,可以在子中重写父的方法并添加额外的逻辑。 7. 使用的静态方法和方法来定义与相关的方法,静态方法不需要访问实例属性方法可以访问属性。 8. 使用__str__()方法来定义的字符串表示,可以自定义的打印输出格式。 9. 使用异常处理来处理可能出现的错误,可以使用try-except语句来捕获异常并进行相应的处理。 10. 使用模块化的方式组织代码,将相关的放在一个模块中,可以提高代码的可复用性和可测试性。 这些是一些常用的Python使用技巧,希望对你有帮助。 #### 引用[.reference_title] - *1* *2* *3* [30 个 Python 编程实用技巧](https://blog.csdn.net/qq_44273429/article/details/120599140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值