语言学习-python-类和对象

由于我先学的C和java,现在学到python的类有一些不同,在此做一些学习笔记。

申明一个类:
class 类名:
	成员变量
	成员函数

特别需要注意类名后面的冒号!

成员函数

示例:

class Person:
	def disname(self):
		print('我叫小明')

在上面代码中定义了一个Person类,它有一个成员方法,功能是打印 ‘我叫小明’,python和C中对成员函数定义稍有不同:

可以看到参数列表里有一个self参数,在python中,成员函数的参数列表必须有一个self参数且在参数列表的 开头,它表示的是实例化的对象本身,可以使用self引用类的属性和和成员函数

构造函数
在python中,构造函数有一个固定的名字(不像c中就是类名),即 _init_ (函数名是以两个下划线开头和两个下划线结尾)

继续上面的示例,加入一个构造函数:

class Person:
	def __init__(self):
		print("这是构造函数")
		
	def disname(self):
		print('我叫小明')

析构函数:
python中的析构函数也是固定的名字,即__del__

成员变量

python中的成员变量分为公有变量私有变量(不像java中的三种)

公有变量定义的方法有两种,一种在类中,一种在类中的构造方法中:

继续修改上面的Person类:

class Person:
	count = 0  # 在类中创建公有变量
	def __init__(self, name):
		self.username = name   # 在构造方法中创建公有变量
		print("这是构造函数")
		
	def disname(self):
		print(self.username)

从注释可以了解到两种创建公有变量的方法,他们都是公有变量,但是也有所不同:

在类中创建的公有变量一般直接就赋值了(好像也必须要赋值),而在构造方法中的公有变量一般通过传参赋值。

还有一个很重要的区别,我先说说静态变量
python中的静态变量不需要显示的定义(在java中是需要使用static关键字),任何在类中定义的公有变量(不是在构造方法中)都可以作为静态变量,可以通过类名来使用:

在上面代码的基础上添加的:

person.count     #普通成员变量
Person.count     #使用静态变量count,在构造方法中创建的公共变量是不能这么做的。

虽然只创建了一个count,但是通过类名和对象名引用count时,访问的实例是不同的,且是 不互相干扰的。

再说下私有变量,在python中使用下划线作为变量前缀和后缀来制定特殊变量:

_xxx_ 开始和结尾分别是两个下划线,它表示的是系统定义名字
__xxx 表示类中私有变量

之前说了静态变量,现在说下静态方法的不同:
1.python 中静态方法不用传入self参数,因此在静态变量中是无法访问实例变量的

2.静态方法中无法直接访问类的静态变量,但是可以通过类名引用静态变量

静态变量既无法访问实例实例变量,也无法直接访问静态变量,所以静态方法与定义它的类没有直接关系,而是起到了类似函数工具库的作用。

使用@staticmethod定义静态方法
eg:

@staticmethod
def 静态方法名称():
	方法体

另外python有一个类方法

它与静态方法比只多了个可以访问静态变量,它需要传入代表本类的cls参数,可以通过cls访问类的静态变量

使用装饰符@classmethed定义类方法

@classmethed 
	def 类方法名(cls):
		方法体

可以使用isinstance()判断对象类型,返回true或false

isinstance(对象名,类名或类型名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值