编程语言
首页 > 编程语言> > python基础-类

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