美文网首页Python
Python类和实例

Python类和实例

作者: 张磊_e325 | 来源:发表于2019-11-22 15:54 被阅读0次
#!usr/bin/env python3
# -*- coding: utf-8 -*-

'python默认第一个字符串是注释,可以用__doc__这个特殊变量引用'

# 作者名
__author__ = 'zhanglei'

class Student(object):
    name = 'Student'
    def __init__ (self, name, score, status):
        self.name = name
        self.score = score
        self.__status = status
    
    def get_status(self):
        return self.__status
    
    def set_status(self, status):
        if 0 <= status <= 1:
            self.__status = status
        else:
            raise ValueError('bad status')
    
    def get_grade (self):
        if self.score>=90:
            return 'A'
        elif self.score>=60:
            return 'B'
        else:
            return 'C'

if __name__ == '__main__':
    xm = Student('小明', 95, 1)
    xg = Student('小刚', 55, 1)
    
    print('%s:%s' % (xm.name, xm.get_grade()))
    print('%s:%s' % (xg.name, xg.get_grade()))
    print('%s:%s' % (xg.name, xg.get_status()))
    print(xm._Student__status)    
    print(xm.__status)    

关键词:class

继承和多态:(object)

如果没有其他需要继承的类,则默认继承(object)

#object -> Animal -> Dog -> Husky
class Animal (object):
  def run(self):
        print('Animal is running...')

class Dog(Animal):
  def run(self):
        print('Dog is running...')

class Husky(Dog):
  def run(self):
        print('Husky is running...')
# 通用方法,
def run_twice(animal):
    animal.run()
    animal.run()

多态这里和java有些区别,java中run_twice方法会限制参数是Animal或其子类,但是python只要是有run方法都可以执行run_twice方法。
准确来说run_twice方法的申明,animal和Animal一点关系没有,是动态申明
这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

变量:

1、特殊变量:【__xxx__】 比如__name__,__author__,__doc__
2、私有变量:【__xxx】   比如 __status
3、虽然我可以被访问,但是,请把我视为私有变量,不要随意访问:【_xxx】 

如上述代码中name='Student',这个是类的属性,可以用Student.name='Student'调用
但是__init__方法也有name参数,所以实例也有name属性。xm.name='小明'
如果此时删除实例的name属性del s.name,此时xm.name='Student'
强烈建议不要类的属性和实例属性重名,实例的name会优先级高于类的name

对于私有变量:

class Student(object):
   def __init__ (self, name):
        self.__name = name
   def get_name(self):
        return self.__name
   def set_name(self, name):
        self.__name = name
# 1. 创建
>>> stu = Student('小红')
# 2. 通过封装的方法访问私有属性
>>> stu.get_name()
'小红'
# 3. 不允许直接访问
>>> stu.__name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
# 4. 赋值__name
>>> stu.__name='小紫'
# 5. 其实上一步赋值并不是实例的私有属性,而是一个新属性,见下一步
>>> stu.__name
'小紫'
# 6. 私有属性值没变
>>> stu.get_name()
'小红'
# 7. 其实python把私有属性变量名隐式转换了,也是可以直接访问的,但是强烈不建议
>>> stu._Student__name
'小红'

相关文章

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

  • Python 类和类实例

  • 1.14类代码编写基础

    一、类对象和实例对象 在python对象模型中,类和通过类产生的实例是两种不同的对象类型: 类类是实例工厂。类的属...

  • python类的实例方法、静态方法和类方法区别及其应用场景

    python类的实例方法、静态方法和类方法区别及其应用场景 一、先看语法,python类语法中有三种方法,实例方法...

  • python类的实例方法、静态方法和类方法区别及其应用场景

    python类的实例方法、静态方法和类方法区别及其应用场景 一、先看语法,python 类语法中有三种方法,实例方...

  • python 类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,...

  • Python 类和实例

    类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响 廖雪峰博客:http:/...

  • python类和实例

    类 类是一种数据结构,可用于创建实例。(一般情况下,类封装了数据和可用于该数据的方法) Python类是可调用的对...

  • Python类和实例

    关键词:class 继承和多态:(object) 如果没有其他需要继承的类,则默认继承(object) 多态这里和...

  • Python类和实例

    @[toc] 1.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的...

网友评论

    本文标题:Python类和实例

    本文链接:https://www.haomeiwen.com/subject/gmtdictx.html