今天给大家介绍“对象”。众所周知,Python是一门面向对象的编程语言,Python之所以如此强大,很大一部分原因也是因为Python中无处不对象,由此可知,学好Python的关键之一就是学好类与对象。好!步入正题。
# 定义一个学生类
class Stu:
numid = 2020000078
name = 'djk'
gender = 1
def Print(self):
print('我是一个学生!')
# 实例化一个对象stu
stu = Stu()
stu.Print()
class Stu:
def __init__(self,numid,name,gender,loc):
self.numid = numid
self.name = name
self.gender = gender
self.loc = loc
def Print(self):
print(self.numid,self.name,self.gender,self.loc)
# 实例化
stu = Stu(1,'djk',1,'shandong')
# 调用Print()函数
stu.Print()
至于这里为什么有个self,可以看我另一篇文章,里面讲解的非常清楚,这里就不详细介绍了,而且还通过与Java语言做对比来理解self。深入理解Python中的self参数和__init__(self)方法–通过类比Java语言
对象就是一个封装,将属于对象的属性和方法封装成一个类,只允许对象自己在内部访问!
class Parent:
def Hello(self):
print('正在调用父类的方法')
class Child(Parent):
pass
p = Parent()
p.Hello()
c = Child()
c.Hello()
class Parent:
def Hello(self):
print('正在调用父类的方法')
class Child(Parent):
def Hello(self):
print('正在调用子类的方法')
p = Parent()
p.Hello()
c = Child()
c.Hello()
# 多态案例
class A():
def fun(self):
print('我是小A')
class B():
def fun(self):
print('我是小B')
a = A()
a.fun()
b = B()
b.fun()
类Class中成员变量有两种属性分别是:实例属性和类属性。
实例属性是在构造函数中定义的(__init__),定义时候以self作为前缀。
类属性是在类中方法之外但又在类之中定义的属性。类属性在所有实例之间共享。在类内部和类外部都可以通过"类.类属性"来访问。
两者访问形式:主程序中,实例属性只能通过对象名访问;而类属性能够通过类名访问,也可以通过对象名访问。
对于公有成员(方法和变量),可以公开使用,既可以在类内部访问,也可以在类外部访问。
对于私有成员(方法和变量),只能在类内部使用,但也可以通过特殊的方法进行访问,即"对象名._类名+私有成员",book._Book__types。
公有方法:通过对象名直接调用。例如,a.printLcs
静态方法:可以通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员。
方法名 | 方法介绍 |
---|---|
issubclass(class,classinfo) | 如果class是classinfo的一个子类,返回True |
isinstance(object,classinfo) | 检查一个实例对象object是否是属于classinfo类的 |
hasattr(object,name) | 测试一个对象object是否有指定的属性name |
getattr(object,name[,default]) | 返回对象指定的属性值,如果属性不存在的话,,如果设置了default,则将default打印出来;否则会抛出一个AttributeError的异常 |
setattr(object,name,value) | 设置对象中指定属性的值,如果指定属性不存在,会新建一个属性并赋值 |
delattr(object,name) | 删除对象中指定属性;如果指定属性已经不存在,则会抛出一个AttributeError的异常 |
property(fget = None,fset = None,fdel = None,fdoc = None) | 以自己定义好的属性去设置属性 |
class C:
count = 0
a = C()
b = C()
c = C()
print('a修改之前:{}'.format(a.count))
print('b修改之前:{}'.format(b.count))
print('c修改之前:{}'.format(c.count))
c.count += 10 # 修改的是实例对象c
print('c修改实例对象之后:{}'.format(c.count))
# 我们修改类对象
C.count += 100
print('a修改之后:{}'.format(a.count))
print('a修改之后:{}'.format(b.count))
print('c修改类对象之后:{}'.format(c.count))
# 为什么会这样呢?因为实例属性将类属性给覆盖了,我们只能看到实例属性,不能看到类属性