python入门(十四):面向对象(属性、方法、继承)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python入门(十四):面向对象(属性、方法、继承),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6754字,纯文字阅读大概需要10分钟。
内容图文
1)属性(特征:通常可以用数据来描述)
(类变量和实例变量)
2)可以做一些动作(方法)
类来管理对象的数据。
属性:类变量和实例变量(私有变量)
方法:
1)实例方法
2)类方法
3)静态方法
专有数据(可以存储,和对外使用)
方法(用于操作专有数据的),实现操作数据的规则。
函数:
无专有数据,谁给他传值都可以处理,并返回
本身不能存储数据。
class compute:
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a+self.b
def add(a,b):
return a+b
#print(add(1,2))
c= compute(1,2)
print(c.add())
c.a+=1
c.b+=1
print(c.a)
print(c.b)
把一组相关数据放到类的实例里面,进行存储、计算等
实现安全性、独立性,规则的操作统一。
def __init__(self,name,gender):
self.name = name
self.gender = gender
def get_name(self):#实例方法,必须要实例化
return self.name
#print(Person("吴老师","Male").get_name())#只能使用一次(连着写,没有存到变量里,使用一次就消失了)
wulaoshi = Person("吴老师","Male")#实例化
print(wulaoshi.get_name())
count = 0 #类变量
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
def get_name(self):#实例方法,必须要实例化
return self.name
#类方法:可以使用类变量,不能使用实例变量(参数没有self,找不到实例的地址,因此不能用实例变量。)
def get_instance_count(cls):
return Person.count
#只能使用一次
#print(Person("吴老师","Male").get_name())
#wulaoshi = Person("吴老师","Male")#实例化
#print(wulaoshi.get_name())
print(Person.count)
Person("吴老师","Male")
print(Person.count)
print(Person.get_instance_count())
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
def get_name(self):#实例方法,必须要实例化
return self.name
#类方法:可以使用类变量,不能使用实例变量
#通过类名来使用,类名.get_instance_count()
#也可以通过实例调用,实例对象.get_instance_count()
@classmethod
def get_instance_count(cls):
return Person.count
@classmethod
def create_a_instance(cls):
return Person("张","女")
@staticmethod #静态方法:不需要self和cls
def get_nation():
return Person.nation
#只能使用一次
#print(Person("吴老师","Male").get_name())
#wulaoshi = Person("吴老师","Male")#实例化
#print(wulaoshi.get_name())
#print(Person.count)
#Person("吴老师","Male")
#print(Person.count)
#print(Person.get_instance_count())
#print(Person.create_a_instance())
#print(Person("吴老师","Male").get_instance_count())
print(Person.get_nation())
print(Person("吴老师","Male").get_nation())
1 实例方法,参数要有self,必须通过实例化的对象去调用。
2 类方法,要加上@classmethod来声明,参数至少有一个,
一般定义为cls,只能使用类变量,不能使用实例变量。
通过类名或者实例对象调用。
3 静态方法,要加上@staticmethod来声明,可以没有参数,
使用类变量,不能使用实例变量。
通过类名或者实例对象调用。
不想做实例化,且只操作类变量:类方法、静态方法
如果想使用实例变量,只能使用实例方法了。
def get_more():
Person.count +=100
return Person.count
print(Person("吴老师","Male").get_more())
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class ChinaPerson(Person):
pass #如果子类没有定义__init__构造方法
#会自动调用父类的。
cp = ChinaPerson("吴老师","男")
print(cp.name)
print(cp.gender)
print(cp.get_name())
print(cp.count)
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
"""
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
"""
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class ChinaPerson(Person):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender):
Person.__init__(self,name,gender)
def get_gender(self):
return self.gender
cp = ChinaPerson("吴老师","男")
print(cp.count)
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男")
print(cp.color)
"""
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
多继承:在括号里面写上多个基类(父类)
子类的构造函数,如果没有实现,则调用第一个基类的构造
函数。
"""
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender,color):
Person.__init__(self,name,gender)
Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男","红色")
print(cp.color)
print(cp.get_name())
print(cp.fly())
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
def get_name(self):#实例方法,必须要实例化
return "bird has no name"
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender,color):
Person.__init__(self,name,gender)
Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男","红色")
print(cp.get_name())
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender):
Person.__init__(self,name,gender)
#Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男")
print(cp.color)
Person Bird-->get_name
ChinaBirdPerson
cp.get_name()
#def get_name(self):
# return "P name!"
pass
class Person(P):
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
def get_name(self):#实例方法,必须要实例化
return "bird has no name"
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender):
Person.__init__(self,name,gender)
#Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男")
print(cp.get_name())
"""
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
多继承:在括号里面写上多个基类(父类)ChinaBirdPerson(Person,Bird)
子类的构造函数,如果没有实现,则调用第一个基类的构造
函数。
"""
多继承的时候同名方法,会进行深度优先的查找。
从父类、爷爷类去查找方法,叫做深度优先
从多继承的同级类去查找方法,叫做广度优先
Person(父类) Bird-->get_name(父类)
ChinaBirdPerson(孙类)
cp.get_name()
原文:https://www.cnblogs.com/suitcases/p/10561955.html
内容总结
以上是互联网集市为您收集整理的python入门(十四):面向对象(属性、方法、继承)全部内容,希望文章能够帮你解决python入门(十四):面向对象(属性、方法、继承)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。