python基础-类
作者:互联网
#举例说明如何定义类和实例化所定义的类
#定义类
class People(object):
name = "默认"
age = "默认"
def __init__(self,name,age):
self.name = name
self.age = age
def pprint(self):
print("名字是:%s"%(self.name))
print("年龄是:%s"%self.age)
def diaoyongpprint(self):
self.pprint()
def diaoyongclass(self):
print ("调用类方法")
self.Classdiaoyongpprint()
@classmethod
def Classdiaoyongpprint(cls):
print ("类方法调用对象方法")
cls.pprint(cls)
def classp(self):
print ("hahaha")
#实例化
person = People('zzz','18')
person.pprint()
# 定义类方法时self参数名可以被命名成其他名字吗?
#可以改变,不管是什么名字都代表当前对象本身
class Change(object):
def __init__(you, name, age):
you.name = name
you.age = age
def pprint(you):
print("名字是:%s" % (you.name))
print("年龄是:%s" % you.age)
change = Change("change","0")
change.pprint()
# 如何判断一个对象属于哪个类
class Animal(object):
def __init__(self, name, age):
self.name = name
self.age = age
def pprint(self):
print("名字是:%s" % (self.name))
print("年龄是:%s" % self.age)
cat = Animal('cat','2')
cat.pprint()
print (type(person))
print (type(cat))
# 如何判断两个变量指的是同一对象
#答:直接判断两者相不相等即可
a = cat
b = cat
print (a==b)
b = person
print (a==b)
a.pprint()
b.pprint()
# 举例说明如何定义类属性
class A:
name = "python课程-属性"
a = A
print(a.name)
# 可以为对象直接添加新属性吗?
#答:可以
person.addr = '北京'
print (person.addr)
# 1. 对象方法可以调用对象方法?
#答:可以
person.diaoyongpprint()
# 2. 对象方法可以调用类方法?
#答:可以
person.diaoyongclass()
# 3. 类方法可以调用对象方法?
# #答:可以
People.Classdiaoyongpprint()
# 4. 定义类方法时必须加特别的装饰器?
#答:对,加 @classmethod
# 5. 对象方法可以通过类名dot形式访问?
#答:可以
People.pprint(People)
People("aa","45").pprint()
# 6. 类方法可以通过对象名dot形式访问?
#答:可以
People.Classdiaoyongpprint()
# 7. 初始时可以通过对象属性方法类属性吗?如果可以其前提条件是什么?
#答:不可以
# 8. 每个类属性都有一个对应的同名对象属性?
#答:对
# 9. 单下划线的对象属性表示“私有”成员?
#答:“单下划线开头” 的成员变量叫做保护变量,意思是只有类对象和子类对象才能访问到这些变量。
# 10. 所有双下划线对象属性都表示“私有”成员
#答:“双下划线开头” 的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
# 举例(animal,dog)说明如何定义继承类
class Dog(Animal):
def __init__(self,name,age,launch):
# Animal.__init__(self,name,age)
super(Dog, self).__init__(name,age)
self.launch = launch
def pprint(self):
Animal.pprint(self)
print ("食物;%s"%self.launch)
# 举例说明super函数的使用
# 1. 类方法可以继承?
dog = Dog("哈士奇", "2", "肉")
# 2. 子类不可以重新定义父类的同名方法?
#可以
dog.pprint()
# 3. 多态是指儿子可以表现父亲的“同名行为”?
#答:多态的好处就是,当我们需要传入更多的子类时,我们只需要继承父类的方法就可以了,
# 而同名方法既可以不重写(即使用Animal的),也可以重写一个特有的
# 举例说明多态的作用
#答:多态的好处就是,当我们需要传入更多的子类时,我们只需要继承父类的方法就可以了,
# 而同名方法既可以不重写(即使用Animal的),也可以重写一个特有的
# 类嵌套举例说明
class parent:
def __init__(self):
self.name = 'parent'
def getName(self):
print(self.name)
class child:
def __init__(self):
self.name = 'child'
def getName(self):
print(self.name)
child = parent.child()
child.getName()
# 通过对象名调用方法举例
person.pprint()
def add(a,b):
return a+b
def sub(a,b):
return a-b
class AA(object):
x=add(3,4)
y=sub(3,9)
@classmethod #类方法
def printa(cls):
print(cls.x,cls.y)
@staticmethod #静态方法
def printb(a,b):
print(a+b)
print(AA.x)
def printc(self,a,b):
#普通方法
print(a+b)
a=AA()
print(AA.x)
AA.printa()
AA.printb(6,7)
AA.printc(AA,6,8)
a.printa()
a.printb(6,7)
a.printc(6,8) #error
# 静态方法可以访问类属性吗?
#答:可以
# 普通方法可以通过对象调用吗?
#答:可以
# 静态方法可以通过对象调用吗?
#答:可以
标签:name,python,self,pprint,基础,print,age,def 来源: https://blog.csdn.net/qq_41934789/article/details/117335820